diff --git a/.github/workflows/foundry.yml b/.github/workflows/foundry.yml index 6f6745e3d3..abbebc87be 100644 --- a/.github/workflows/foundry.yml +++ b/.github/workflows/foundry.yml @@ -193,7 +193,7 @@ jobs: FOUNDRY_PROFILE=coverage \ FOUNDRY_CACHE=true \ FOUNDRY_CACHE_PATH=cache \ - forge coverage --report lcov --report summary --no-match-coverage "script|test" -j $(nproc) + forge coverage --report lcov --report summary --no-match-coverage "script|test" -j $(nproc) --no-match-test test_noCoverage genhtml -q -o report ./lcov.info # Upload coverage report as artifact before potential failure diff --git a/.github/workflows/validate-deployment-scripts.yml b/.github/workflows/validate-deployment-scripts.yml index 32a4b378be..d3db0903c5 100644 --- a/.github/workflows/validate-deployment-scripts.yml +++ b/.github/workflows/validate-deployment-scripts.yml @@ -18,7 +18,7 @@ jobs: strategy: fail-fast: true matrix: - env: [mainnet, testnet-sepolia, testnet-hoodi, testnet-base-sepolia, base] + env: [mainnet, testnet-sepolia, testnet-hoodi, testnet-base-sepolia, base, preprod-hoodi] steps: - uses: step-security/harden-runner@ec9f2d5744a09debf3a187a3f4f675c53b671911 @@ -31,7 +31,7 @@ jobs: submodules: recursive - name: Install Zeus - run: npm install -g @layr-labs/zeus + run: npm install -g @layr-labs/zeus --ignore-scripts # Restore Forge cache - name: Cache Forge Build @@ -66,7 +66,7 @@ jobs: - name: Validate Solidity Scripts run: | # Find all .sol files under /script/releases - RELEASE_FILES=$(find script/releases -type f -name "*.sol" ! -name "Env.sol" ! -name "CrosschainDeployLib.sol" 2>/dev/null || echo "") + RELEASE_FILES=$(find script/releases -type f -name "*.sol" ! -name "Env.sol" ! -name "CrosschainDeployLib.sol" ! -name "TestUtils.sol" ! -name "CoreContractsDeployer.sol" ! -name "CoreUpgradeQueueBuilder.sol" 2>/dev/null || echo "") # Combine file lists FILES="$RELEASE_FILES" @@ -91,6 +91,8 @@ jobs: RPC_URL="${{ secrets.RPC_MAINNET }}" elif [ "${{ matrix.env }}" = "base" ]; then RPC_URL="${{ secrets.RPC_BASE }}" + elif [ "${{ matrix.env }}" = "preprod-hoodi" ]; then + RPC_URL="${{ secrets.RPC_HOODI }}" fi # Run zeus test on each file with the specified environment and RPC URL diff --git a/CHANGELOG/CHANGELOG-1.9.0.md b/CHANGELOG/CHANGELOG-1.9.0.md new file mode 100644 index 0000000000..cc6941d9b9 --- /dev/null +++ b/CHANGELOG/CHANGELOG-1.9.0.md @@ -0,0 +1,61 @@ +# v1.9.0 Slashing UX Improvements + +## Release Manager + +@ypatil12 @eigenmikem @0xclandestine + +# Overview + +The Slashing UX improvement release is a tech debt-focused release that improves key parts of the Eigenlayer Core UX. This release will upgrade every core contract. + +The below release notes cover Core Contracts. + +## Highlights + +🚀 New Features + +- The `AllocationManager` has been split into two contracts to address size limitations of the contract. The main contract handles state-mutating operations, while `AllocationManagerView` handles all read-only view functions. **This is not a breaking change for introspection as previous introspection calls fallback to `delegateCall` into the `AllocationManagerView` contract.**. For more information, see the [contract architecture](../docs/core/AllocationManager.md#contract-architecture). +- The `ProtocolRegistry` is a new contract that stores all proxy contract addresses, global semver, and has the ability to pause the entire protocol. This contract will be deployed on all chains. +- Two new `createOperatorSets` functions (for redistributing and non redistributing operatorSets) have been added that take in a slasher address. This address is the *only* address that can slash an operatorSet. Changing the address is behind a `ALLOCATION_CONFIGURATION_DELAY` (17.5 days on mainnet). + +⛔ Breaking Changes + +- The slasher permissions are set and stored in the `AllocationManager` instead of the `PermissionController`. Only one address can slash an operatorSet; the address is initially set upon creation of the operatorSet. OperatorSets created prior to this release will have their slasher migrated based on the following rules: + - If there is no slasher set or the slasher in the `PermissionController` is the 0 address, the AVS address will be set as the slasher + - If there are multiple slashers set in the `PermissionController`, the first address will be set as the slasher +- Semver (`SemverMixin.sol`) has been removed from all contracts, except from those that inherit the `SignatureUtilsMixin`. The version of the core protocol can be introspected via the `ProtocolRegistry`. + +📌 Deprecations + +The old `createOperatorSets` functions in the leftmost column will be deprecated in Q2 2026 in favor of the newly specified functions. The old functions do not pass in a slasher. The new functions do pass in a slasher. If the old function is used, the slasher of the operatorSet is set to the avs address. + +| Function | MigrateTo | Notes | +| -------- | -------- | -------- | +| `createOperatorSets(avs, CreateSetParams[])` | `createOperatorSets(address avs, CreateSetParamsV2[])` | New function takes in a slasher address | +| `createRedistributingOperatorSets(avs, CreateSetParams[], redistributionRecipients[])` | `createRedistributingOperatorSets(avs, CreateSetParamsV2[], redistributionRecipients[])` | New function takes in a slasher address | + +🔧 Improvements + +- Added a non-revert `_canCall` in the `PermissionControllerMixin` for space savings. This function is used in the `AllocationManager` and `DelegationManager`. +- The allocation delay for a newly created operator is active immediately. This allows operators to make allocations instantly after registering in the core. +- The internal `SlashingLib.scaleForBurning` function has been deprecated in favor of `SlashingLib.calcSlashedAmount`, standardizing the calculation of slashed shares across the withdrawal queue and storage. See [PR #1502](https://github.com/Layr-Labs/eigenlayer-contracts/pull/1502) for more information. + + +# Changelog + +- feat: re-enable forge fmt + foundry v1.5.0 [PR #1669](https://github.com/layr-labs/eigenlayer-contracts/pull/1669) +- feat: substitute calcSlashedAmount for scaleForBurning [PR #1502](https://github.com/layr-labs/eigenlayer-contracts/pull/1502) +- fix: `v1.9.0` upgrade script [PR #1666](https://github.com/layr-labs/eigenlayer-contracts/pull/1666) +- feat: `v1.9.0` upgrade scripts + reusable upgrade helpers [PR #1665](https://github.com/layr-labs/eigenlayer-contracts/pull/1665) +- chore: update interface natspec for DM [PR #1664](https://github.com/layr-labs/eigenlayer-contracts/pull/1664) +- feat: slashing commitments [PR #1645](https://github.com/layr-labs/eigenlayer-contracts/pull/1645) +- feat: remove semver + minor optimizations [PR #1654](https://github.com/layr-labs/eigenlayer-contracts/pull/1654) +- feat: split `AllocationManager` [PR #1643](https://github.com/layr-labs/eigenlayer-contracts/pull/1643) +- feat: add protocol registry [PR #1655](https://github.com/layr-labs/eigenlayer-contracts/pull/1655) +- feat: instant alloc delay from dm [PR #1646](https://github.com/layr-labs/eigenlayer-contracts/pull/1646) +- chore: remove holesky [PR #1662](https://github.com/layr-labs/eigenlayer-contracts/pull/1662) +- chore: hardcode foundry ci to v1.3.5 [PR #1658](https://github.com/layr-labs/eigenlayer-contracts/pull/1658) +- chore: hardcode foundry to v1.3.5 in ci [PR #1657](https://github.com/layr-labs/eigenlayer-contracts/pull/1657) +- feat(audit): publish Hourglass + Multichain + RMS audit reports [PR #1644](https://github.com/layr-labs/eigenlayer-contracts/pull/1644) +- docs: add transport frequency for multichain [PR #1642](https://github.com/layr-labs/eigenlayer-contracts/pull/1642) +- chore: update readMe for multichain/hourglass [PR #1637](https://github.com/layr-labs/eigenlayer-contracts/pull/1637) \ No newline at end of file diff --git a/docs/core/AllocationManager.md b/docs/core/AllocationManager.md index 9b679e27ee..7542c65da0 100644 --- a/docs/core/AllocationManager.md +++ b/docs/core/AllocationManager.md @@ -10,6 +10,7 @@ Libraries and Mixins: | File | Notes | | -------- | -------- | +| [`SplitContractMixin.sol`](../../src/contracts/mixins/SplitContractMixin.sol) | contract splitting for codesize optimization | | [`PermissionControllerMixin.sol`](../../src/contracts/mixins/PermissionControllerMixin.sol) | account delegation | | [`Deprecated_OwnableUpgradeable`](../../src/contracts/mixins/Deprecated_OwnableUpgradeable.sol) | deprecated ownable logic | | [`Pausable.sol`](../../src/contracts/permissions/Pausable.sol) | | @@ -17,6 +18,16 @@ Libraries and Mixins: | [`OperatorSetLib.sol`](../../src/contracts/libraries/OperatorSetLib.sol) | encode/decode operator sets | | [`Snapshots.sol`](../../src/contracts/libraries/Snapshots.sol) | historical state | +### Function Deprecation Notice Q2 2026 + +The `v1.9.0` slashing upgrade introduces a single slasher per operatorSet that is stored in the `AllocationManager`. The functions in the leftmost column will be deprecated in Q2 2026 in favor of the newly specified function (if applicable). + +| Function | MigrateTo | Notes | +| -------- | -------- | -------- | +| `createOperatorSets(avs, CreateSetParams[])` | `createOperatorSets(address avs, CreateSetParamsV2[])` | New function takes in a slasher address | +| `createRedistributingOperatorSets(avs, CreateSetParams[], redistributionRecipients[])` | `createRedistributingOperatorSets(avs, CreateSetParamsV2[], redistributionRecipients[])` | New function takes in a slasher address | +| [`migrateSlashers(operatorSets[])`](#migrateslashers) | N/A | Migration function to migrate slashers from the `PermissionController` to the `AllocationManager` | + ## Prior Reading * [ELIP-002: Slashing via Unique Stake and Operator Sets](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md) @@ -29,11 +40,58 @@ The `AllocationManager` manages AVS metadata registration, registration and dere The `AllocationManager's` responsibilities are broken down into the following concepts: +* [Contract Architecture](#contract-architecture) * [AVS Metadata](#avs-metadata) * [Operator Sets](#operator-sets) * [Allocations and Slashing](#allocations-and-slashing) * [Config](#config) +## Contract Architecture + +The `AllocationManager` uses a **split contract pattern** implemented via the `SplitContractMixin` to address EVM contract size limitations while maintaining full backwards compatibility. + +```mermaid +graph TD +Alice --> |call| Proxy["AllocationManager Proxy"] +Proxy -->|delegatecall| Logic["AllocationManager Logic"] +Logic -->|_delegateView| View["AllocationManager View"] +``` + +### Split Contract Pattern + +**Main Contract (`AllocationManager`):** +- Contains all state-mutating functions (actions) +- Inherits from `SplitContractMixin` which provides delegation capabilities +- Delegates all view function calls to the separate view contract +- Maintains the same external interface as a monolithic contract + +**View Contract (`AllocationManagerView`):** +- Contains all read-only view functions +- Shares the same storage layout as the main contract using `layout at 151` directive +- Implements the same `IAllocationManagerView` interface + +### Rationale + +**Codesize Optimization:** +- The EVM has a contract size limit of 24KB (24,576 bytes) for deployed contracts +- Complex contracts like `AllocationManager` with extensive functionality can exceed this limit +- By splitting view functions into a separate contract, the main contract stays under the size limit +- This allows for more comprehensive functionality without compromising deployability + +**Backwards Compatibility:** +- The external interface remains identical to a monolithic contract +- All existing integrations continue to work without modification +- View functions are transparently delegated using `_delegateView()` +- No breaking changes to the ABI or function signatures + +**Implementation Details:** +- View functions in the main contract use `_delegateView(viewImplementation)` to delegate calls. +- The `viewImplementation` address is set during construction and stored as an immutable variable. +- The `_delegateView()` function conveniently indicates which calls are intended to be delegated as view functions, but it does not enforce this at the EVM level; rather, it signals intended usage and expected behavior to the user or integrator. +- Both contracts are aligned in storage layout, so all state variables are accessible as intended. + +This pattern is especially useful for complex contracts that require a comprehensive set of view functions while maintaining the ability to perform state mutations. It helps keep contracts deployable within EVM bytecode limits, while making clear which functions are for data retrieval. + ## Parameterization * `ALLOCATION_CONFIGURATION_DELAY`: The delay in blocks before allocations take effect. @@ -215,26 +273,53 @@ The `RegistrationStatus.slashableUntil` value is used to ensure an operator rema #### `createOperatorSets` +***Note: The `createOperatorSets` function that uses `CreateSetParams` will be deprecated in favor of `createOperatorSets` that takes in `CreateSetParamsV2` (with a slasher) in Q2 2026.*** + ```solidity /** * @notice Parameters used by an AVS to create new operator sets * @param operatorSetId the id of the operator set to create * @param strategies the strategies to add as slashable to the operator set + * @dev This struct and its associated method will be deprecated in Early Q2 2026 */ struct CreateSetParams { uint32 operatorSetId; IStrategy[] strategies; } +/** + * @notice Parameters used by an AVS to create new operator sets + * @param operatorSetId the id of the operator set to create + * @param strategies the strategies to add as slashable to the operator set + * @param slasher the address that will be the slasher for the operator set + */ + +struct CreateSetParamsV2 { + uint32 operatorSetId; + IStrategy[] strategies; + address slasher; +} + /** * @notice Allows an AVS to create new operator sets, defining strategies that the operator set uses + * @dev Upon creation, the address that can slash the operatorSet is the `avs` address. If you would like to use a different address, + * use the `createOperatorSets` method which takes in `CreateSetParamsV2` instead. + * @dev THIS FUNCTION WILL BE DEPRECATED IN EARLY Q2 2026 IN FAVOR OF `createOperatorSets`, WHICH TAKES IN `CreateSetParamsV2` + * @dev Reverts for: + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InvalidOperatorSet: The operatorSet already exists + * - InputAddressZero: The slasher is the zero address */ -function createOperatorSets( - address avs, - CreateSetParams[] calldata params -) - external - checkCanCall(avs) +function createOperatorSets(address avs, CreateSetParams[] calldata params) external checkCanCall(avs); + +/** + * @notice Allows an AVS to create new operator sets, defining strategies that the operator set uses + * @dev Reverts for: + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InvalidOperatorSet: The operatorSet already exists + * - InputAddressZero: The slasher is the zero address + */ +function createOperatorSets(address avs, CreateSetParamsV2[] calldata params) external checkCanCall(avs); ``` _Note: this method can be called directly by an AVS, or by a caller authorized by the AVS. See [`PermissionController.md`](../permissions/PermissionController.md) for details._ @@ -243,6 +328,8 @@ AVSs use this method to create new operator sets. An AVS can create as many oper On creation, the `avs` specifies an `operatorSetId` unique to the AVS. Together, the `avs` address and `operatorSetId` create a `key` that uniquely identifies this operator set throughout the `AllocationManager`. +The `avs` also specifies a `slasher`, an address that can slash the operatorSet. For the `createOperatorSets` function that takes in the *old* `CreateSetParams` struct, the slasher is set to the `avs` address. + Optionally, the `avs` can provide a list of `strategies`, specifying which strategies will be slashable for the new operator set. AVSs may create operator sets with various strategies based on their needs - and strategies may be added to more than one operator set. *Effects*: @@ -250,26 +337,68 @@ Optionally, the `avs` can provide a list of `strategies`, specifying which strat * For each `params.strategies` element: * Add `strategy` to `_operatorSetStrategies[operatorSetKey]` * Emits `StrategyAddedToOperatorSet` event + * Sets the slasher in `_slashers[operatorSetKey]`, with an `effectBlock = uint32(block.number)`, allowing the slasher to be active immediately + * Emits a `SlasherUpdated` event + *Requirements*: * Caller MUST be authorized, either as the AVS itself or an admin/appointee (see [`PermissionController.md`](../permissions/PermissionController.md)) * AVS MUST have registered metadata via calling `updateAVSMetadataURI` * For each `CreateSetParams` element: * Each `params.operatorSetId` MUST NOT already exist in `_operatorSets[avs]` + * The `slasher` MUST NOT be the zero address #### `createRedistributingOperatorSets` +***Note: The `createRedistributingOperatorSets` function that uses `CreateSetParams` will be deprecated in favor of `createOperatorSets` that takes in `CreateSetParamsV2` (with a slasher) in Q2 2026.*** + ```solidity /** - * @notice Allows an AVS to create new redistributing operator sets, defining strategies and the redistribution recipient the operator set uses + * @notice Allows an AVS to create new Redistribution operator sets. + * @param avs The AVS creating the new operator sets. + * @param params An array of operator set creation parameters. + * @param redistributionRecipients An array of addresses that will receive redistributed funds when operators are slashed. + * @dev Same logic as `createOperatorSets`, except `redistributionRecipients` corresponding to each operator set are stored. + * Additionally, emits `RedistributionOperatorSetCreated` event instead of `OperatorSetCreated` for each created operator set. + * @dev The address that can slash the operatorSet is the `avs` address. If you would like to use a different address, + * use the `createOperatorSets` method which takes in `CreateSetParamsV2` instead. + * @dev THIS FUNCTION WILL BE DEPRECATED IN EARLY Q2 2026 IN FAVOR OF `createRedistributingOperatorSets` WHICH TAKES IN `CreateSetParamsV2` + * @dev Reverts for: + * - InputArrayLengthMismatch: The length of the params array does not match the length of the redistributionRecipients array + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InputAddressZero: The redistribution recipient is the zero address + * - InvalidRedistributionRecipient: The redistribution recipient is the zero address or the default burn address + * - InvalidOperatorSet: The operatorSet already exists + * - InvalidStrategy: The strategy is the BEACONCHAIN_ETH_STRAT or the EIGEN strategy + * - InputAddressZero: The slasher is the zero address */ function createRedistributingOperatorSets( address avs, CreateSetParams[] calldata params, address[] calldata redistributionRecipients -) - external - checkCanCall(avs) +) external checkCanCall(avs); + +/** + * @notice Allows an AVS to create new Redistribution operator sets. + * @param avs The AVS creating the new operator sets. + * @param params An array of operator set creation parameters. + * @param redistributionRecipients An array of addresses that will receive redistributed funds when operators are slashed. + * @dev Same logic as `createOperatorSets`, except `redistributionRecipients` corresponding to each operator set are stored. + * Additionally, emits `RedistributionOperatorSetCreated` event instead of `OperatorSetCreated` for each created operator set. + * @dev Reverts for: + * - InputArrayLengthMismatch: The length of the params array does not match the length of the redistributionRecipients array + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InputAddressZero: The redistribution recipient is the zero address + * - InvalidRedistributionRecipient: The redistribution recipient is the zero address or the default burn address + * - InvalidOperatorSet: The operatorSet already exists + * - InvalidStrategy: The strategy is the BEACONCHAIN_ETH_STRAT or the EIGEN strategy + * - InputAddressZero: The slasher is the zero address + */ +function createRedistributingOperatorSets( + address avs, + CreateSetParamsV2[] calldata params, + address[] calldata redistributionRecipients +) external checkCanCall(avs); ``` AVSs use this method to create new redistributing operatorSets. Unlike the previous function, slashed funds for this operatorSet are sent to a `redistributionRecipient`. This value is set only once, upon creation. Note that redistributing operatorSets may not have Native ETH, as the protocol does not support native eth redistribution. See [ELIP-006](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-006.md) for additional context. @@ -281,6 +410,8 @@ AVSs use this method to create new redistributing operatorSets. Unlike the previ * Emits `StrategyAddedToOperatorSet` event * Sets the `redistributionRecipient` of the operatorSet * Emits the `RedistributionAddressSet` + * Sets the slasher in `_slashers[operatorSetKey]`, with an `effectBlock = uint32(block.number)`, allowing the slasher to be active immediately + * Emits a `SlasherUpdated` event *Requirements*: * Caller MUST be authorized, either as the AVS itself or an admin/appointee (see [`PermissionController.md`](../permissions/PermissionController.md)) @@ -288,6 +419,7 @@ AVSs use this method to create new redistributing operatorSets. Unlike the previ * The `redistributionRecipient` MUST NOT be the 0 address * For each `CreateSetParams` element: * Each `params.operatorSetId` MUST NOT already exist in `_operatorSets[avs]` + * The `slasher` MUST NOT be the zero address #### `addStrategiesToOperatorSet` @@ -771,11 +903,10 @@ function slashOperator( ) external onlyWhenNotPaused(PAUSED_OPERATOR_SLASHING) - checkCanCall(avs) returns (uint256, uint256[] memory) ``` -_Note: this method can be called directly by an AVS, or by a caller authorized by the AVS. See [`PermissionController.md`](../permissions/PermissionController.md) for details._ +_Note: As of v1.9.0, this method can *only* be called by a single caller authorized by the AVS. See [`PermissionController.md`](../permissions/PermissionController.md) for details._ AVSs use slashing as a punitive disincentive for misbehavior. For details and examples of how slashing works, see [ELIP-002#Slashing of Unique Stake](https://github.com/eigenfoundation/ELIPs/blob/main/ELIPs/ELIP-002.md#slashing-of-unique-stake). Note that whatever slashing criteria an AVS decides on, the only criteria enforced by the `AllocationManager` are those detailed above (see [Evaluating Whether an Allocation is "Slashable"](#evaluating-whether-an-allocation-is-slashable)). @@ -827,6 +958,7 @@ Once slashing is processed for a strategy, [slashed stake is burned or redistrib **Methods:** * [`setAllocationDelay`](#setallocationdelay) * [`setAVSRegistrar`](#setavsregistrar) +* [`updateSlasher`](#updateslasher) #### `setAllocationDelay` @@ -837,6 +969,9 @@ Once slashing is processed for a strategy, [slashed stake is burned or redistrib * allocating magnitude to an operator set, and the magnitude becoming slashable. * @param operator The operator to set the delay on behalf of. * @param delay the allocation delay in blocks + * @dev When the delay is set for a newly-registered operator (via the `DelegationManager.registerAsOperator` method), + * the delay will take effect immediately, allowing for operators to allocate slashable stake immediately. + * Else, the delay will take effect after `ALLOCATION_CONFIGURATION_DELAY` blocks. */ function setAllocationDelay( address operator, @@ -847,7 +982,7 @@ function setAllocationDelay( _Note: IF NOT CALLED BY THE `DelegationManager`, this method can be called directly by an operator, or by a caller authorized by the operator. See [`PermissionController.md`](../permissions/PermissionController.md) for details._ -This function sets an operator's allocation delay, in blocks. This delay can be updated by the operator once set. Both the initial setting of this value and any further updates _take `ALLOCATION_CONFIGURATION_DELAY` blocks_ to take effect. Because having a delay is a requirement to allocating slashable stake, this effectively means that once the slashing release goes live, no one will be able to allocate slashable stake for at least `ALLOCATION_CONFIGURATION_DELAY` blocks. +This function sets an operator's allocation delay, in blocks. This delay can be updated by the operator once set. The initial setting of this value by a newly created operator via [`DelegationManager.registerAsOperator`](./DelegationManager.md#registerasoperator) will take effect immediately. The setting of this value for an operator who has already been registered in core or further updates _take `ALLOCATION_CONFIGURATION_DELAY` blocks_ to take effect. Because having a delay is a requirement to allocating slashable stake, this effectively means that once the slashing release goes live, no already-created operators will be able to allocate slashable stake for at least `ALLOCATION_CONFIGURATION_DELAY` blocks. The `DelegationManager` calls this upon operator registration for all new operators created after the slashing release. For operators that existed in the `DelegationManager` _prior_ to the slashing release, **they will need to call this method to configure an allocation delay prior to allocating slashable stake to any AVS**. @@ -855,7 +990,8 @@ The allocation delay's primary purpose is to give stakers delegated to an operat *Effects*: * Sets the operator's `pendingDelay` to the proposed `delay`, and save the `effectBlock` at which the `pendingDelay` can be activated - * `effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1` + * If a newly registered operator in core, `effectBlock = uint32(block.number)`, allowing operators to allocate slashable stake immediately after registration + * Else, `effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1` * If the operator has a `pendingDelay`, and if the `effectBlock` has passed, sets the operator's `delay` to the `pendingDelay` value * This also sets the `isSet` boolean to `true` to indicate that the operator's `delay`, even if 0, was set intentionally * Emits an `AllocationDelaySet` event @@ -917,3 +1053,81 @@ Note that when an operator registers, registration will FAIL if the call to `IAV *Requirements*: * Caller MUST be authorized, either as the AVS itself or an admin/appointee (see [`PermissionController.md`](../permissions/PermissionController.md)) + +#### `updateSlasher` + +```solidity +/** + * @notice Allows an AVS to update the slasher for an operator set + * @param operatorSet the operator set to update the slasher for + * @param slasher the new slasher + * @dev The new slasher will take effect in DEALLOCATION_DELAY blocks + * @dev The slasher can only be updated if it has already been set. The slasher is set either on operatorSet creation or, + * for operatorSets created prior to v1.9.0, via `migrateSlashers` + * @dev Reverts for: + * - InvalidCaller: The caller cannot update the slasher for the operator set (set via the `PermissionController`) + * - InvalidOperatorSet: The operator set does not exist + * - SlasherNotSet: The slasher has not been set yet + * - InputAddressZero: The slasher is the zero address + */ +function updateSlasher(OperatorSet memory operatorSet, address slasher) external; +``` + +Updates the slasher that can call [`slashOperator`](#slashoperator) on behalf of an operatorSet. The slasher will become active after `DEALLOCATION_DELAY` blocks. Only 1 address can slash an operatorSet. + +Prior to `v1.9.0`, the address that could set the slasher was settable via the `PermissionController`, which allowed any number of admins/appointees to slash an operatorSet on behalf of an AVS. OperatorSets created prior to `v1.9.0` will have their slasher migrated to the `AllocationManager` - see [`migrateSlashers`](#migrateslashers) for more information. + +*Effects*: +* Sets the operatorSet's `pendingSlasher` to the proposed `slasher`, and save the `effectBlock` at which the `pendingSlasher` can be activated + * `effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1` +* If the operatorSet has a `pendingDelay`, and if the `effectBlock` has passed, sets the operatorSet's slasher to the pendingSlasher +* Emits an `SlasherUpdated` event + +*Requirements*: +* Caller MUST be authorized, either as the AVS itself or an admin/appointee (see [`PermissionController.md`](../permissions/PermissionController.md)) +* The operatorSet MUST exist +* The slasher MUST already be set - either upon creation of the operatorSet or migration for operatorSets created prior to `v1.9.0` +* The slasher address MUST NOT be the zero address + +#### `migrateSlashers` + +```solidity +/** + * @notice Allows any address to migrate the slasher from the permission controller to the ALM + * @param operatorSets the list of operator sets to migrate the slasher for + * @dev This function is used to migrate the slasher from the permission controller to the ALM for operatorSets created prior to `v1.9.0` + * @dev Migrates based on the following rules: + * - If there is no slasher set or the slasher in the `PermissionController`is the 0 address, the AVS address will be set as the slasher + * - If there are multiple slashers set in the `PermissionController`, the first address will be set as the slasher + * @dev A migration can only be completed once for a given operatorSet + * @dev This function will be deprecated in Early Q2 2026. EigenLabs will migrate the slasher for all operatorSets created prior to `v1.9.0` + * @dev This function does not revert to allow for simpler offchain calling. It will no-op if: + * - The operator set does not exist + * - The slasher has already been set, either via migration or creation of the operatorSet + */ +function migrateSlashers( + OperatorSet[] memory operatorSets +) external; +``` + +Migrates a slasher from the `PermissionController` to the `AllocationManager`. **This function is useful for operatorSets that have been created prior to `v1.9.0`**. Customers *will not* have to migrate a slasher themselves; migration will be done on behalf of all operatorSets upon completion of the `v1.9.0` upgrade. + +Only 1 slasher can be slash an operatorSet on behalf of an AVS; however, multiple addresses may have had the ability to slash an operatorSet via the previous `PermissionController`-based access control. Because of this mismatch, slashers are migrated based on the following criteria: +1. If there are no slashers set in the `PermissionController` OR the slasher set is the 0 address, set the slasher to the AVS +2. If there are *multiple* slashers set, the first address will be set as the slasher + +**The slasher can only be migrated once**. After, an operatorSet must use [`updateSlasher`](#updateslasher) to set a new address. + +*Effects*: +* For each operatorSet: + * Sets the operatorSet's `pendingSlasher` to the proposed `slasher`, and save the `effectBlock` at which the `pendingSlasher` can be activated + * `effectBlock = uint32(block.number)`, allowing the slasher to slash immediately + * If the operatorSet has a `pendingDelay`, and if the `effectBlock` has passed, sets the operatorSet's slasher to the pendingSlasher + * Emits a `SlasherMigrated` event + * Emits an `SlasherUpdated` event + +*Requirements*: +* For each operatorSet: + * If the operatorSet does not exist, do not migrate (no revert) + * If the slasher is already set, do not migrate (no revert) + * The slasher address MUST NOT be the zero address diff --git a/docs/core/DelegationManager.md b/docs/core/DelegationManager.md index f06ea782e3..36570866c1 100644 --- a/docs/core/DelegationManager.md +++ b/docs/core/DelegationManager.md @@ -96,7 +96,7 @@ function registerAsOperator( Registers the caller as an operator in EigenLayer. The new operator provides the following input parameters: * `address initDelegationApprover`: *(OPTIONAL)* if set to a non-zero address, this address must sign and approve new delegation from stakers to this operator (See [`delegateTo`](#delegateto)) -* `uint32 allocationDelay`: the delay (in blocks) before slashable stake allocations will take effect. This is passed to the `AllocationManager` (See [`AllocationManager.md#setAllocationDelay`](./AllocationManager.md#setallocationdelay)) +* `uint32 allocationDelay`: the delay (in blocks) before slashable stake allocations will take effect. This is passed to the `AllocationManager` (See [`AllocationManager.md#setAllocationDelay`](./AllocationManager.md#setallocationdelay)). Upon registration, this allocation delay is effective immediately. Further modifications directly via `AllocationManager.setAllocationDelay` take `ALLOCATION_CONFIGURATION_DELAY` blocks. * `string calldata metadataURI`: emits this input in the event `OperatorMetadataURIUpdated`. Does not store the value anywhere. `registerAsOperator` cements the operator's delegation approver and allocation delay in storage, and self-delegates the operator to themselves - permanently marking the caller as an operator. They cannot "deregister" as an operator - however, if they have deposited funds, they can still withdraw them (See [Delegation and Withdrawals](#delegation-and-withdrawals)). diff --git a/docs/core/ProtocolRegistry.md b/docs/core/ProtocolRegistry.md new file mode 100644 index 0000000000..b0b273584f --- /dev/null +++ b/docs/core/ProtocolRegistry.md @@ -0,0 +1,143 @@ +# ProtocolRegistry + +| File | Notes | +| --- | --- | +| [`ProtocolRegistry.sol`](../../src/contracts/core/ProtocolRegistry.sol) | core logic | +| [`ProtocolRegistryStorage.sol`](../../src/contracts/core/storage/ProtocolRegistryStorage.sol) | state variables | +| [`IProtocolRegistry.sol`](../../src/contracts/interfaces/IProtocolRegistry.sol) | interface, events, and types | + +Libraries and Mixins: + +| File | Notes | +| --- | --- | +| [`AccessControlEnumerableUpgradeable`](https://docs.openzeppelin.com/contracts/5.x/api/access#AccessControlEnumerableUpgradeable) | role-based access control | +| [`Initializable`](https://docs.openzeppelin.com/contracts/5.x/api/proxy#Initializable) | protects initializer | +| [`ShortStringsUpgradeable`](https://docs.openzeppelin.com/contracts/5.x/api/utils#ShortStringsUpgradeable) | compact semantic version storage | +| [`EnumerableMap`](https://docs.openzeppelin.com/contracts/5.x/api/utils#EnumerableMap) | iterable mapping for deployment catalog | +| [`IPausable`](../../src/contracts/interfaces/IPausable.sol) | pause hook invoked during emergencies | + +## Overview + +`ProtocolRegistry` is the canonical catalog of EigenLayer protocol deployments. It maps human-readable deployment names to contract addresses, tracks per-contract configuration flags, emits semantic-version updates every time a new protocol shipment occurs, and exposes functionality to pause the the entire core protocol. This contract is deployed on all EigenLayer source and destination chains. + +### Roles and Permissions + +* `DEFAULT_ADMIN_ROLE`: Full control, required for `initialize`, `ship`, and `configure`. +* `PAUSER_ROLE`: Defined as `hex"01"` in storage. Addresses with this role can invoke `pauseAll()`. + +### Deployment Config Structure + +```solidity +struct DeploymentConfig { + bool pausable; // deployment supports IPausable.pauseAll() + bool deprecated; // deployment should no longer be interacted with +} +``` + +* `pausable` gates whether `pauseAll()` targets the deployment. +* `deprecated` prevents new pauses from being attempted against sunset contracts. + +--- + +## Write Functions + +### `initialize` + +```solidity +function initialize(address initialAdmin, address pauserMultisig) external initializer +``` + +Initializes the proxy once by granting: + +* `DEFAULT_ADMIN_ROLE` to `initialAdmin`. +* `PAUSER_ROLE` to `pauserMultisig`. + +The constructor disables further initializers; therefore `initialize` must be called exactly once after deployment. Upon deployment the `executorMultisig` will be the default admin and the `pauserMultisig` will hold the `PAUSER_ROLE`. + +### `ship` + +```solidity +function ship( + address[] calldata addresses, + DeploymentConfig[] calldata configs, + string[] calldata names, + string calldata semanticVersion +) external onlyRole(DEFAULT_ADMIN_ROLE) +``` + +Ships a new semantic version and batch-registers deployments: + +*Effects*: +* Calls `_updateSemanticVersion(semanticVersion)` and emits `SemanticVersionUpdated`. +* For each address to ship: + * Calls `_appendDeployment`, which stores the name→address mapping, records the config, and emits `DeploymentShipped`. + +*Requirements*: +* Caller must hold `DEFAULT_ADMIN_ROLE`. + +In practice, for upgrades that do not deploy net new contracts, only the `semanticVersion` parameter will be populated, with the rest left empty. + +A contract name may be passed to this function repeatedly; each time, the previous address mapping for that name is overwritten with the new one. In general, this should be uncommon, as changing a core contract's address is an exceptional event. + +### `configure` + +```solidity +function configure(address addr, DeploymentConfig calldata config) external onlyRole(DEFAULT_ADMIN_ROLE) +``` + +Updates the stored `DeploymentConfig` for a single deployment: + +*Effects*: +* Overwrites `_deploymentConfigs[addr]` with the supplied configuration. +* Emits `DeploymentConfigured(addr, config)`. + +*Requirements*: +* Caller must hold `DEFAULT_ADMIN_ROLE`. + +### `pauseAll` + +```solidity +function pauseAll() external onlyRole(PAUSER_ROLE) +``` + +Triggers emergency pausing across all tracked deployments: + +*Effects*: +* Iterates over `_deployments`, invoking `IPausable(addr).pauseAll()` on every entry marked `pausable` and not `deprecated`. +* Silently skips deployments that fail the interface call (propagates no revert) to maximize coverage in emergencies. + +*Requirements*: +* Caller must hold `PAUSER_ROLE`. +* Deployments targeted must implement `IPausable`; registry does not enforce this at compile time, so operators should ensure configs reflect actual contract capabilities. + +Intended for crisis response (e.g., discovered exploit) where pauser multisig needs to freeze protocol components rapidly. + +--- + +## View Functions + +### `version` + +Returns the full semantic version string (e.g., `"1.9.0"`) by decoding `_semanticVersion`. + +### `majorVersion` + +Extracts and returns only the major component (characters before the first dot) of the semantic version. + +### `getAddress` + +Resolves a deployment name to its registered address. Useful for on-chain lookups by other contracts that only need the address. + +### `getDeployment` + +Returns both the address and `DeploymentConfig` for a given name. Preferred by off-chain services that need to inspect configuration flags alongside the address. + +### `getAllDeployments` + +Materializes the entire registry into parallel arrays of names, addresses, and configs. Primarily intended for off-chain introspection. + +### `totalDeployments` + +Returns the length of `_deployments`, which doubles as the number of rows the registry will iterate over during `pauseAll()`. + + diff --git a/docs/core/ReleaseManager.md b/docs/core/ReleaseManager.md index f3d7c08459..5860542bb6 100644 --- a/docs/core/ReleaseManager.md +++ b/docs/core/ReleaseManager.md @@ -11,7 +11,6 @@ Libraries and Mixins: | File | Notes | | -------- | -------- | | [`PermissionControllerMixin.sol`](../../src/contracts/mixins/PermissionControllerMixin.sol) | account delegation | -| [`SemVerMixin.sol`](../../src/contracts/mixins/SemVerMixin.sol) | semantic versioning | | [`OperatorSetLib.sol`](../../src/contracts/libraries/OperatorSetLib.sol) | encode/decode operator sets | ## Overview diff --git a/foundry.toml b/foundry.toml index 6a2164514c..1b8983eddc 100644 --- a/foundry.toml +++ b/foundry.toml @@ -22,7 +22,7 @@ "forge-std/=lib/forge-std/src/" ] # Specifies the exact version of Solidity to use, overriding auto-detection. - solc_version = '0.8.27' + solc_version = '0.8.30' # If enabled, treats Solidity compiler warnings as errors, preventing artifact generation if warnings are present. deny_warnings = true # If set to true, changes compilation pipeline to go through the new IR optimizer. @@ -55,7 +55,8 @@ ] # An array of file paths from which warnings should be ignored during compilation. ignored_warnings_from = [ - "src/test" + "src/test", + "src/contracts/core/AllocationManager.sol" # TODO: Remove ] # Test Configuration diff --git a/pkg/bindings/AVSDirectory/binding.go b/pkg/bindings/AVSDirectory/binding.go index e7df3c4e7a..ec270ce33b 100644 --- a/pkg/bindings/AVSDirectory/binding.go +++ b/pkg/bindings/AVSDirectory/binding.go @@ -39,7 +39,7 @@ type ISignatureUtilsMixinTypesSignatureWithSaltAndExpiry struct { // AVSDirectoryMetaData contains all meta data concerning the AVSDirectory contract. var AVSDirectoryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cancelSalt\",\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"isSpent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToEigenLayer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161185938038061185983398101604081905261002e916101b3565b808084846001600160a01b038116610059576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b039081166080521660a0526100748161008a565b60c0525061008290506100d0565b5050506102e4565b5f5f829050601f815111156100bd578260405163305a27a960e01b81526004016100b49190610289565b60405180910390fd5b80516100c8826102be565b179392505050565b5f54610100900460ff16156101375760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b4565b5f5460ff90811614610186575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461019c575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101c5575f5ffd5b83516101d081610188565b60208501519093506101e181610188565b60408501519092506001600160401b038111156101fc575f5ffd5b8401601f8101861361020c575f5ffd5b80516001600160401b038111156102255761022561019f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102535761025361019f565b60405281815282820160200188101561026a575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102de575f198160200360031b1b821691505b50919050565b60805160a05160c05161152f61032a5f395f81816104240152610d4d01525f8181610360015261053901525f818161023c01528181610ac90152610dbc015261152f5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f0000000000000000000000000000000000000000000000000000000000000000610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f0000000000000000000000000000000000000000000000000000000000000000610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea26469706673582212205d1a7fe2f701906564102d19d8626dd6ccc14ab32da1b7f72df6cb714b9674e464736f6c634300081b0033", + Bin: "0x60e060405234801561000f575f5ffd5b5060405161185938038061185983398101604081905261002e916101b3565b808084846001600160a01b038116610059576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b039081166080521660a0526100748161008a565b60c0525061008290506100d0565b5050506102e4565b5f5f829050601f815111156100bd578260405163305a27a960e01b81526004016100b49190610289565b60405180910390fd5b80516100c8826102be565b179392505050565b5f54610100900460ff16156101375760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b4565b5f5460ff90811614610186575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461019c575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101c5575f5ffd5b83516101d081610188565b60208501519093506101e181610188565b60408501519092506001600160401b038111156101fc575f5ffd5b8401601f8101861361020c575f5ffd5b80516001600160401b038111156102255761022561019f565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102535761025361019f565b60405281815282820160200188101561026a575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102de575f198160200360031b1b821691505b50919050565b60805160a05160c05161152f61032a5f395f81816104240152610d4d01525f8181610360015261053901525f818161023c01528181610ac90152610dbc015261152f5ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f000000000000000000000000000000000000000000000000000000000000000081565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f0000000000000000000000000000000000000000000000000000000000000000610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f0000000000000000000000000000000000000000000000000000000000000000610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122064697c4fdcc50736b33bd46e800e17ba533956006c6510b66a7dabda26daab2a64736f6c634300081e0033", } // AVSDirectoryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/AVSDirectoryStorage/binding.go b/pkg/bindings/AVSDirectoryStorage/binding.go index a6e00bb6f8..b5033ce001 100644 --- a/pkg/bindings/AVSDirectoryStorage/binding.go +++ b/pkg/bindings/AVSDirectoryStorage/binding.go @@ -38,7 +38,7 @@ type ISignatureUtilsMixinTypesSignatureWithSaltAndExpiry struct { // AVSDirectoryStorageMetaData contains all meta data concerning the AVSDirectoryStorage contract. var AVSDirectoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cancelSalt\",\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"isSpent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToEigenLayer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_FORCE_DEREGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"avsOperatorStatus\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cancelSalt\",\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"isSpent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToEigenLayer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", } // AVSDirectoryStorageABI is the input ABI used to generate the binding from. @@ -435,37 +435,6 @@ func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) OperatorSaltIsSpen return _AVSDirectoryStorage.Contract.OperatorSaltIsSpent(&_AVSDirectoryStorage.CallOpts, operator, salt) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AVSDirectoryStorage *AVSDirectoryStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _AVSDirectoryStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AVSDirectoryStorage *AVSDirectoryStorageSession) Version() (string, error) { - return _AVSDirectoryStorage.Contract.Version(&_AVSDirectoryStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AVSDirectoryStorage *AVSDirectoryStorageCallerSession) Version() (string, error) { - return _AVSDirectoryStorage.Contract.Version(&_AVSDirectoryStorage.CallOpts) -} - // CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // // Solidity: function cancelSalt(bytes32 salt) returns() diff --git a/pkg/bindings/AllocationManager/binding.go b/pkg/bindings/AllocationManager/binding.go index d82bb135db..486a9ad3d7 100644 --- a/pkg/bindings/AllocationManager/binding.go +++ b/pkg/bindings/AllocationManager/binding.go @@ -49,6 +49,13 @@ type IAllocationManagerTypesCreateSetParams struct { Strategies []common.Address } +// IAllocationManagerTypesCreateSetParamsV2 is an auto generated low-level Go binding around an user-defined struct. +type IAllocationManagerTypesCreateSetParamsV2 struct { + OperatorSetId uint32 + Strategies []common.Address + Slasher common.Address +} + // IAllocationManagerTypesDeregisterParams is an auto generated low-level Go binding around an user-defined struct. type IAllocationManagerTypesDeregisterParams struct { Operator common.Address @@ -80,8 +87,8 @@ type OperatorSet struct { // AllocationManagerMetaData contains all meta data concerning the AllocationManager contract. var AllocationManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_DEALLOCATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_ALLOCATION_CONFIGURATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategiesToOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearDeallocationQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToClear\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterFromOperatorSets\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.DeregisterParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"futureBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.AllocateParams[]\",\"components\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"newMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerForOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.RegisterParams\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.SlashingParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadsToSlash\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Empty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSnapshotOrdering\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfBounds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", - Bin: "0x610160604052348015610010575f5ffd5b506040516161d63803806161d683398101604081905261002f916101ef565b8084888886868a6001600160a01b03811661005d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c05263ffffffff90811660e05216610100521661012052610095816100ae565b61014052506100a26100f4565b50505050505050610367565b5f5f829050601f815111156100e1578260405163305a27a960e01b81526004016100d8919061030c565b60405180910390fd5b80516100ec82610341565b179392505050565b5f54610100900460ff161561015b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100d8565b5f5460ff908116146101aa575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101c0575f5ffd5b50565b805163ffffffff811681146101d6575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f60e0888a031215610205575f5ffd5b8751610210816101ac565b6020890151909750610221816101ac565b6040890151909650610232816101ac565b6060890151909550610243816101ac565b9350610251608089016101c3565b925061025f60a089016101c3565b60c08901519092506001600160401b0381111561027a575f5ffd5b8801601f81018a1361028a575f5ffd5b80516001600160401b038111156102a3576102a36101db565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102d1576102d16101db565b6040528181528282016020018c10156102e8575f5ffd5b8160208401602083015e5f6020838301015280935050505092959891949750929550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610361575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051610100516101205161014051615dca61040c5f395f61136d01525f81816104cd0152612c9101525f81816106400152613be001525f81816103d6015281816117660152611e3901525f818161079b0152613a4c01525f81816107d5015281816113a10152818161140b0152818161211901528181612f0501526137a201525f818161066701528181612b5d01526141f80152615dca5ff3fe608060405234801561000f575f5ffd5b50600436106102ff575f3560e01c8063670d3ba211610195578063b2447af7116100e4578063db4df7611161009e578063f231bd0811610079578063f231bd08146107f7578063f605ce081461080a578063fabc1cbc1461081d578063fe4b84df14610830575f5ffd5b8063db4df76114610796578063dc2af692146107bd578063df5cf723146107d0575f5ffd5b8063b2447af714610708578063b66bd9891461071b578063b9fbaed11461072e578063ba1a84e51461075d578063c221d8ae14610770578063d3d96ff414610783575f5ffd5b8063886f11951161014f578063952899ee1161012a578063952899ee146106bc578063a9333ec8146106cf578063a9821821146106e2578063adc2e3d9146106f5575f5ffd5b8063886f1195146106625780638ce648541461068957806394d7d00c146106a9575f5ffd5b8063670d3ba2146105c45780636cfb4481146105d75780636e3492b5146106025780636e875dba1461061557806379ae50cd146106285780637bc1ef611461063b575f5ffd5b806340120dab1161025157806350feea201161020b57806356c483e6116101e657806356c483e61461057e578063595c6a67146105915780635ac86ab7146105995780635c975abb146105bc575f5ffd5b806350feea2014610543578063547afb871461055657806354fd4d5014610569575f5ffd5b806340120dab146104875780634177a87c146104a85780634657e26a146104c85780634a10ffe5146104ef5780634b5046ef1461050f5780634cfd293914610522575f5ffd5b8063261f84e0116102bc5780632bab2c4a116102975780632bab2c4a1461042d578063304c10cd1461044057806332a879e4146104535780633635205714610466575f5ffd5b8063261f84e0146103be5780632981eb77146103d15780632b453a9a1461040d575f5ffd5b80630f3df50e1461030357806310e1b9b8146103335780631352c3e614610353578063136439dd1461037657806315fe50281461038b578063260dc758146103ab575b5f5ffd5b610316610311366004614bf0565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b610346610341366004614c0a565b610884565b60405161032a9190614c51565b610366610361366004614c84565b6108bd565b604051901515815260200161032a565b610389610384366004614cb8565b610938565b005b61039e610399366004614ccf565b610972565b60405161032a9190614d4d565b6103666103b9366004614bf0565b610a89565b6103896103cc366004614d9f565b610aba565b6103f87f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161032a565b61042061041b366004614e84565b610b63565b60405161032a9190614f27565b61042061043b366004614f8a565b610b79565b61031661044e366004614ccf565b610c18565b61038961046136600461500e565b610c47565b61047961047436600461508e565b610d8e565b60405161032a9291906150e0565b61049a6104953660046150f8565b610ed1565b60405161032a929190615185565b6104bb6104b6366004614bf0565b61104c565b60405161032a91906151e2565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b6105026104fd3660046151f4565b611070565b60405161032a9190615237565b61038961051d36600461500e565b611118565b610535610530366004614bf0565b6111ab565b60405190815260200161032a565b610389610551366004615282565b6111cd565b6105026105643660046152e0565b6112be565b610571611366565b60405161032a9190615322565b61038961058c366004615357565b611396565b61038961149b565b6103666105a7366004615381565b606654600160ff9092169190911b9081161490565b606654610535565b6103666105d2366004614c84565b6114af565b6105ea6105e53660046150f8565b6114db565b6040516001600160401b03909116815260200161032a565b6103896106103660046153b7565b6114f0565b6104bb610623366004614bf0565b6118b3565b61039e610636366004614ccf565b6118c4565b6103f87f000000000000000000000000000000000000000000000000000000000000000081565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b61069c6106973660046153e8565b61199e565b60405161032a919061542b565b6105026106b736600461543d565b611a5a565b6103896106ca366004615498565b611b46565b6105ea6106dd3660046150f8565b611fe7565b6103896106f0366004615641565b612016565b6103896107033660046156bf565b6120c8565b610535610716366004614bf0565b612411565b610389610729366004615282565b612433565b61074161073c366004614ccf565b61258d565b60408051921515835263ffffffff90911660208301520161032a565b61053561076b366004614ccf565b612627565b6104bb61077e366004614c84565b612647565b6103896107913660046150f8565b612670565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b6103666107cb366004614ccf565b61279d565b6103167f000000000000000000000000000000000000000000000000000000000000000081565b610366610805366004614bf0565b6127d0565b6105ea6108183660046150f8565b6127ef565b61038961082b366004614cb8565b6127fb565b61038961083e366004614cb8565b612868565b5f5f60a65f61085185612979565b815260208101919091526040015f20546001600160a01b031690508015610878578061087d565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101829052906108b3856108ad86612979565b856129dc565b9695505050505050565b6001600160a01b0382165f908152609e602052604081208190816108e085612979565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff169282019290925291508061092e5750806020015163ffffffff164311155b9150505b92915050565b610940612b48565b60665481811681146109655760405163c61dca5d60e01b815260040160405180910390fd5b61096e82612beb565b5050565b6001600160a01b0381165f908152609d602052604081206060919061099690612c28565b90505f816001600160401b038111156109b1576109b1614b00565b6040519080825280602002602001820160405280156109f557816020015b604080518082019091525f80825260208201528152602001906001900390816109cf5790505b5090505f5b82811015610a81576001600160a01b0385165f908152609d60205260409020610a5c90610a279083612c31565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a6e57610a6e615701565b60209081029190910101526001016109fa565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206109329163ffffffff90811690612c3c16565b82610ac481612c53565b610ae15760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610b19576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610b5c57610b5485858584818110610b3957610b39615701565b9050602002810190610b4b9190615715565b620e16e4612cfd565b600101610b1b565b5050505050565b6060610b7184848443612eb1565b949350505050565b6060610b8785858585612eb1565b90505f5b8451811015610c0f57610bb7858281518110610ba957610ba9615701565b6020026020010151876108bd565b610c07575f5b8451811015610c05575f838381518110610bd957610bd9615701565b60200260200101518281518110610bf257610bf2615701565b6020908102919091010152600101610bbd565b505b600101610b8b565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610c40578061087d565b5090919050565b84610c5181612c53565b610c6e5760405163932d94f760e01b815260040160405180910390fd5b838214610c8e576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260a4602052604090205460ff16610cc6576040516348f7dbb960e01b815260040160405180910390fd5b5f5b84811015610d85575f848483818110610ce357610ce3615701565b9050602002016020810190610cf89190614ccf565b90506001600160a01b038116610d21576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601610d4e576040516364be1a3f60e11b815260040160405180910390fd5b610d7c88888885818110610d6457610d64615701565b9050602002810190610d769190615715565b83612cfd565b50600101610cc8565b50505050505050565b5f60606001610d9c8161319e565b84610da681612c53565b610dc35760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280886001600160a01b03168152602001876020016020810190610df19190615733565b63ffffffff1690529050610e08606087018761574c565b9050610e17604088018861574c565b905014610e37576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610e699163ffffffff90811690612c3c16565b610e8657604051631fb1705560e21b815260040160405180910390fd5b610e9c610e966020880188614ccf565b826108bd565b610eb95760405163ebbff49760e01b815260040160405180910390fd5b610ec386826131cc565b945094505050509250929050565b6001600160a01b0382165f908152609d602052604081206060918291610ef690612c28565b90505f816001600160401b03811115610f1157610f11614b00565b604051908082528060200260200182016040528015610f5557816020015b604080518082019091525f8082526020820152815260200190600190039081610f2f5790505b5090505f826001600160401b03811115610f7157610f71614b00565b604051908082528060200260200182016040528015610fba57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610f8f5790505b5090505f5b8381101561103d576001600160a01b0388165f908152609d60205260408120610fec90610a279084612c31565b90508084838151811061100157611001615701565b602002602001018190525061101789828a610884565b83838151811061102957611029615701565b602090810291909101015250600101610fbf565b509093509150505b9250929050565b60605f61087d60995f61105e86612979565b81526020019081526020015f2061390c565b60605f83516001600160401b0381111561108c5761108c614b00565b6040519080825280602002602001820160405280156110b5578160200160208202803683370190505b5090505f5b8451811015610a81576110e68582815181106110d8576110d8615701565b602002602001015185611fe7565b8282815181106110f8576110f8615701565b6001600160401b03909216602092830291909101909101526001016110ba565b5f6111228161319e565b838214611142576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610d85576111a38787878481811061116257611162615701565b90506020020160208101906111779190614ccf565b86868581811061118957611189615701565b905060200201602081019061119e9190615791565b613918565b600101611144565b5f60a55f6111b884612979565b81526020019081526020015f20549050919050565b836111d781612c53565b6111f45760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926112339291612c3c16565b61125057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d85576112b68286868481811061127057611270615701565b90506020020160208101906112859190614ccf565b6112b160405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506127d0565b613a1c565b600101611252565b60605f82516001600160401b038111156112da576112da614b00565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b5090505f5b8351811015610a81576113348585838151811061132757611327615701565b6020026020010151611fe7565b82828151811061134657611346615701565b6001600160401b0390921660209283029190910190910152600101611308565b60606113917f0000000000000000000000000000000000000000000000000000000000000000613afc565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611491576113cf82612c53565b6113ec576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611450573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147491906157b2565b6114915760405163ccea9e6f60e01b815260040160405180910390fd5b61096e8282613b39565b6114a3612b48565b6114ad5f19612beb565b565b5f61087d83609a5f6114c086612979565b81526020019081526020015f20613ce590919063ffffffff16565b5f5f6114e78484613d06565b95945050505050565b60026114fb8161319e565b61151061150b6020840184614ccf565b612c53565b80611529575061152961150b6040840160208501614ccf565b611546576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611555604084018461574c565b9050811015611817575f604051806040016040528085602001602081019061157d9190614ccf565b6001600160a01b03168152602001611598604087018761574c565b858181106115a8576115a8615701565b90506020020160208101906115bd9190615733565b63ffffffff16815250905061160a816020015163ffffffff1660985f8760200160208101906115ec9190614ccf565b6001600160a01b0316815260208101919091526040015f2090612c3c565b61162757604051631fb1705560e21b815260040160405180910390fd5b609e5f6116376020870187614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61166083612979565b815260208101919091526040015f205460ff16611690576040516325131d4f60e01b815260040160405180910390fd5b6116ca61169c82612979565b609c5f6116ac6020890189614ccf565b6001600160a01b0316815260208101919091526040015f2090613e75565b506117026116db6020860186614ccf565b609a5f6116e785612979565b81526020019081526020015f20613e8090919063ffffffff16565b506117106020850185614ccf565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe8260405161174891906157d1565b60405180910390a2604080518082019091525f81526020810161178b7f0000000000000000000000000000000000000000000000000000000000000000436157f3565b63ffffffff169052609e5f6117a36020880188614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6117cc84612979565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611548565b5061182b61044e6040840160208501614ccf565b6001600160a01b031663303ca9566118466020850185614ccf565b6118566040860160208701614ccf565b611863604087018761574c565b6040518563ffffffff1660e01b81526004016118829493929190615848565b5f604051808303815f87803b158015611899575f5ffd5b505af11580156118ab573d5f5f3e3d5ffd5b505050505050565b6060610932609a5f61105e85612979565b6001600160a01b0381165f908152609c60205260408120606091906118e890612c28565b90505f816001600160401b0381111561190357611903614b00565b60405190808252806020026020018201604052801561194757816020015b604080518082019091525f80825260208201528152602001906001900390816119215790505b5090505f5b82811015610a81576001600160a01b0385165f908152609c6020526040902061197990610a279083612c31565b82828151811061198b5761198b615701565b602090810291909101015260010161194c565b60605f84516001600160401b038111156119ba576119ba614b00565b604051908082528060200260200182016040528015611a0357816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816119d85790505b5090505f5b8551811015610c0f57611a35868281518110611a2657611a26615701565b60200260200101518686610884565b828281518110611a4757611a47615701565b6020908102919091010152600101611a08565b60605f83516001600160401b03811115611a7657611a76614b00565b604051908082528060200260200182016040528015611a9f578160200160208202803683370190505b5090505f5b8451811015610c0f576001600160a01b0386165f90815260a1602052604081208651611b1492879291899086908110611adf57611adf615701565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20613e9490919063ffffffff16565b828281518110611b2657611b26615701565b6001600160401b0390921660209283029190910190910152600101611aa4565b5f611b508161319e565b611b5983612c53565b611b76576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f611b828661258d565b9150915081611ba45760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610b5c57838181518110611bc557611bc5615701565b60200260200101516040015151848281518110611be457611be4615701565b6020026020010151602001515114611c0f576040516343714afd60e01b815260040160405180910390fd5b5f848281518110611c2257611c22615701565b602090810291909101810151518082015181516001600160a01b03165f90815260989093526040909220909250611c629163ffffffff90811690612c3c16565b611c7f57604051631fb1705560e21b815260040160405180910390fd5b5f611c8a87836108bd565b90505f5b868481518110611ca057611ca0615701565b60200260200101516020015151811015611fdc575f878581518110611cc757611cc7615701565b6020026020010151602001518281518110611ce457611ce4615701565b60200260200101519050611cfb898261ffff613918565b5f5f611d0a8b6108ad88612979565b91509150806040015163ffffffff165f14611d3857604051630d8fcbe360e41b815260040160405180910390fd5b5f611d4587858489613ea8565b9050611d8a825f01518c8a81518110611d6057611d60615701565b6020026020010151604001518781518110611d7d57611d7d615701565b6020026020010151613ede565b600f0b602083018190525f03611db357604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b1215611ef7578015611e7957611e34611dd488612979565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b611e5e7f0000000000000000000000000000000000000000000000000000000000000000436157f3565b611e699060016157f3565b63ffffffff166040830152611f64565b611e8b83602001518360200151613ef5565b6001600160401b031660208401528a518b9089908110611ead57611ead615701565b6020026020010151604001518581518110611eca57611eca615701565b6020908102919091018101516001600160401b031683525f9083015263ffffffff43166040830152611f64565b5f8260200151600f0b1315611f6457611f1883602001518360200151613ef5565b6001600160401b039081166020850181905284519091161015611f4e57604051636c9be0bf60e01b815260040160405180910390fd5b611f5889436157f3565b63ffffffff1660408301525b611f798c611f7189612979565b868686613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611fae865f01518760200151613ef5565b8660400151604051611fc4959493929190615874565b60405180910390a1505060019092019150611c8e9050565b505050600101611baa565b6001600160a01b038083165f90815260a160209081526040808320938516835292905290812061087d9061414c565b8261202081612c53565b61203d5760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff1661207f576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516120ba9291906158ed565b60405180910390a250505050565b60026120d38161319e565b826120dd81612c53565b6120fa5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218291906157b2565b61219f5760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b6121ae602085018561574c565b905081101561237657604080518082019091525f90806121d16020880188614ccf565b6001600160a01b031681526020018680602001906121ef919061574c565b858181106121ff576121ff615701565b90506020020160208101906122149190615733565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612250929190811690612c3c16565b61226d57604051631fb1705560e21b815260040160405180910390fd5b61227786826108bd565b1561229557604051636c6c6e2760e11b815260040160405180910390fd5b6122be6122a182612979565b6001600160a01b0388165f908152609c602052604090209061415f565b506122ea86609a5f6122cf85612979565b81526020019081526020015f2061416a90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e8260405161232491906157d1565b60405180910390a26001600160a01b0386165f908152609e6020526040812060019161234f84612979565b815260208101919091526040015f20805460ff1916911515919091179055506001016121a1565b5061238761044e6020850185614ccf565b6001600160a01b031663c63fd502856123a36020870187614ccf565b6123b0602088018861574c565b6123bd60408a018a615900565b6040518763ffffffff1660e01b81526004016123de96959493929190615942565b5f604051808303815f87803b1580156123f5575f5ffd5b505af1158015612407573d5f5f3e3d5ffd5b5050505050505050565b5f610932609a5f61242185612979565b81526020019081526020015f20612c28565b8361243d81612c53565b61245a5760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926124999291612c3c16565b6124b657604051631fb1705560e21b815260040160405180910390fd5b5f6124c082612979565b90505f5b84811015612407576125098686838181106124e1576124e1615701565b90506020020160208101906124f69190614ccf565b5f84815260996020526040902090613e80565b612526576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061255a5761255a615701565b905060200201602081019061256f9190614ccf565b60405161257d92919061598e565b60405180910390a16001016124c4565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b90910416606082018190528493919291901580159061260e5750826060015163ffffffff164310155b1561261d575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061093290612c28565b6001600160a01b0382165f908152609f602052604081206060919061092e908261105e86612979565b8161267a81612c53565b6126975760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff91906157b2565b61271c57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361277481610c18565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f6127a8836118c4565b90505f6127b484610972565b90506127c0848361417e565b80610b715750610b71848261417e565b5f620e16e46127de83610843565b6001600160a01b0316141592915050565b5f5f610c0f8484613d06565b6128036141f6565b6066548019821981161461282a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff161580801561288657505f54600160ff909116105b8061289f5750303b15801561289f57505f5460ff166001145b6129075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612928575f805461ff0019166101001790555b61293182612beb565b801561096e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016129c492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610932906159b4565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190612a3c9061414c565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff16918101829052919250431015612ade579092509050612b40565b612aef815f01518260200151613ef5565b6001600160401b0316815260208101515f600f9190910b1215612b2d57612b1e82602001518260200151613ef5565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce91906157b2565b6114ad57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f610932825490565b5f61087d83836142a7565b5f818152600183016020526040812054151561087d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af1158015612cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093291906157b2565b5f6040518060400160405280856001600160a01b03168152602001845f016020810190612d2a9190615733565b63ffffffff168152509050612d74816020015163ffffffff1660985f876001600160a01b03166001600160a01b031681526020019081526020015f2061415f90919063ffffffff16565b612d9157604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c81604051612dc091906157d1565b60405180910390a16001600160a01b038216620e16e414801590612e55578260a65f612deb85612979565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e8284604051612e4c92919061598e565b60405180910390a15b5f5b612e64602086018661574c565b90508110156118ab57612ea983612e7e602088018861574c565b84818110612e8e57612e8e615701565b9050602002016020810190612ea39190614ccf565b84613a1c565b600101612e57565b606083516001600160401b03811115612ecc57612ecc614b00565b604051908082528060200260200182016040528015612eff57816020015b6060815260200190600190039081612eea5790505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f0e0e67686866040518363ffffffff1660e01b8152600401612f519291906159d7565b5f60405180830381865afa158015612f6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f9291908101906159fb565b90505f5b8551811015613194575f868281518110612fb257612fb2615701565b6020026020010151905085516001600160401b03811115612fd557612fd5614b00565b604051908082528060200260200182016040528015612ffe578160200160208202803683370190505b5084838151811061301157613011615701565b60209081029190910101525f5b865181101561318a575f87828151811061303a5761303a615701565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506130759061414c565b9050806001600160401b03165f0361308e575050613182565b5f61309a858d85610884565b90508863ffffffff16816040015163ffffffff16111580156130c257505f8160200151600f0b125b156130e4576130d8815f01518260200151613ef5565b6001600160401b031681525b80515f906130ff906001600160401b039081169085166142cd565b90506131468189898151811061311757613117615701565b6020026020010151878151811061313057613130615701565b60200260200101516142e190919063ffffffff16565b89888151811061315857613158615701565b6020026020010151868151811061317157613171615701565b602002602001018181525050505050505b60010161301e565b5050600101612f96565b5050949350505050565b606654600160ff83161b908116036131c95760405163840a48d560e01b815260040160405180910390fd5b50565b5f6060816131dd604086018661574c565b90506001600160401b038111156131f6576131f6614b00565b60405190808252806020026020018201604052801561321f578160200160208202803683370190505b50905061322f604086018661574c565b90506001600160401b0381111561324857613248614b00565b604051908082528060200260200182016040528015613271578160200160208202803683370190505b50915060a55f61328086612979565b81526020019081526020015f205f815461329990615b07565b918290555092505f5b6132af604087018761574c565b905081101561389e5780158061334257506132cd604087018761574c565b6132d8600184615b1f565b8181106132e7576132e7615701565b90506020020160208101906132fc9190614ccf565b6001600160a01b0316613312604088018861574c565b8381811061332257613322615701565b90506020020160208101906133379190614ccf565b6001600160a01b0316115b61335f57604051639f1c805360e01b815260040160405180910390fd5b61336c606087018761574c565b8281811061337c5761337c615701565b905060200201355f1080156133bc5750670de0b6b3a76400006133a2606088018861574c565b838181106133b2576133b2615701565b9050602002013511155b6133d957604051631353603160e01b815260040160405180910390fd5b61341a6133e9604088018861574c565b838181106133f9576133f9615701565b905060200201602081019061340e9190614ccf565b60995f6114c089612979565b613437576040516331bc342760e11b815260040160405180910390fd5b5f8061348961344960208a018a614ccf565b61345289612979565b61345f60408c018c61574c565b8781811061346f5761346f615701565b90506020020160208101906134849190614ccf565b6129dc565b805191935091506001600160401b03165f036134a6575050613896565b5f6134e16134b760608b018b61574c565b868181106134c7576134c7615701565b85516001600160401b0316926020909102013590506142f5565b83519091506134fc6001600160401b038084169083166142cd565b86868151811061350e5761350e615701565b60200260200101818152505081835f0181815161352b9190615b32565b6001600160401b0316905250835182908590613548908390615b32565b6001600160401b0316905250602084018051839190613568908390615b32565b6001600160401b031690525060208301515f600f9190910b1215613680575f6135cb61359760608d018d61574c565b888181106135a7576135a7615701565b9050602002013585602001516135bc90615b51565b6001600160801b0316906142f5565b9050806001600160401b0316846020018181516135e89190615b75565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61361c60208d018d614ccf565b8b61362a60408f018f61574c565b8a81811061363a5761363a615701565b905060200201602081019061364f9190614ccf565b613660885f01518960200151613ef5565b8860400151604051613676959493929190615874565b60405180910390a1505b6136d261369060208c018c614ccf565b6136998b612979565b6136a660408e018e61574c565b898181106136b6576136b6615701565b90506020020160208101906136cb9190614ccf565b8787613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61370060208c018c614ccf565b8a61370e60408e018e61574c565b8981811061371e5761371e615701565b90506020020160208101906137339190614ccf565b865160405161374794939291904390615874565b60405180910390a161379861375f60208c018c614ccf565b61376c60408d018d61574c565b8881811061377c5761377c615701565b90506020020160208101906137919190614ccf565b865161430b565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635ae679a76137d460208d018d614ccf565b8b8b8e80604001906137e6919061574c565b8b8181106137f6576137f6615701565b905060200201602081019061380b9190614ccf565b89516040516001600160e01b031960e088901b16815261383395949392918991600401615ba2565b6020604051808303815f875af115801561384f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615bf5565b87868151811061388557613885615701565b602002602001018181525050505050505b6001016132a2565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56138cd6020870187614ccf565b856138db604089018961574c565b856138e960808c018c615900565b6040516138fc9796959493929190615c0c565b60405180910390a1509250929050565b60605f61087d8361438d565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f8111801561396257508261ffff1682105b15610b5c576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613996906143e6565b90505f5f6139a58884896129dc565b91509150806040015163ffffffff164310156139c357505050610b5c565b6139d08884898585613f14565b6001600160a01b038089165f90815260a360209081526040808320938b168352929052206139fd90614438565b50613a0785615b07565b9450613a1284615ca2565b9350505050613950565b8015613a9e576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014801590613a8157507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b613a9e57604051632711b74d60e11b815260040160405180910390fd5b613aae8260995f6122cf87612979565b613acb5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b838360405161279092919061598e565b60605f613b08836144b5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613bb55750806060015163ffffffff164310155b15613bcf57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613c057f0000000000000000000000000000000000000000000000000000000000000000436157f3565b613c109060016157f3565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db9101612790565b6001600160a01b0381165f908152600183016020526040812054151561087d565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b81811015613e31576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613d9990836144dc565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff16918101829052919250431015613e14575050613e31565b613e22868260200151613ef5565b95505050806001019050613d61565b506001600160a01b038086165f90815260a1602090815260408083209388168352929052208390613e619061414c565b613e6b9190615b32565b9150509250929050565b5f61087d838361454b565b5f61087d836001600160a01b03841661454b565b5f61087d8383670de0b6b3a764000061462e565b5f613eb98460995f6114c089612979565b8015613ec25750815b80156114e757505090516001600160401b031615159392505050565b5f61087d6001600160401b03808516908416615cb7565b5f61087d613f0c836001600160401b038616615b75565b600f0b614683565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613fda57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b156140bc576001600160a01b0385165f908152609f602090815260408083208784529091529020614094908461416a565b506001600160a01b0385165f908152609d602052604090206140b6908561415f565b50610b5c565b80516001600160401b03165f03610b5c576001600160a01b0385165f908152609f6020908152604080832087845290915290206140f99084613e80565b506001600160a01b0385165f908152609f60209081526040808320878452909152902061412590612c28565b5f03610b5c576001600160a01b0385165f908152609d602052604090206118ab9085613e75565b5f61093282670de0b6b3a76400006146ee565b5f61087d8383614725565b5f61087d836001600160a01b038416614725565b5f805b82518110156141ed576141ad848483815181106141a0576141a0615701565b60200260200101516108bd565b80156141d657506141d68382815181106141c9576141c9615701565b60200260200101516127d0565b156141e5576001915050610932565b600101614181565b505f9392505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614252573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615ce4565b6001600160a01b0316336001600160a01b0316146114ad5760405163794821ff60e01b815260040160405180910390fd5b5f825f0182815481106142bc576142bc615701565b905f5260205f200154905092915050565b5f61087d83670de0b6b3a764000084614771565b5f61087d8383670de0b6b3a7640000614771565b5f61087d8383670de0b6b3a76400006001614856565b6001600160a01b038084165f90815260a16020908152604080832093861683529290522061433a9043836148a5565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612790565b6060815f018054806020026020016040519081016040528092919081815260200182805480156143da57602002820191905f5260205f20905b8154815260200190600101908083116143c6575b50505050509050919050565b5f6144008254600f81810b600160801b909204900b131590565b1561441e57604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144528254600f81810b600160801b909204900b131590565b1561447057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561093257604051632cd44ac360e21b815260040160405180910390fd5b5f5f6144fe6144ea846148be565b85546144f99190600f0b615cff565b614927565b8454909150600160801b9004600f90810b9082900b1261453157604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614625575f61456d600183615b1f565b85549091505f9061458090600190615b1f565b90508181146145df575f865f01828154811061459e5761459e615701565b905f5260205f200154905080875f0184815481106145be576145be615701565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615d26565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610932565b5f915050610932565b82545f908161463f86868385614990565b905080156146795761466386614656600184615b1f565b5f91825260209091200190565b54600160201b90046001600160e01b03166108b3565b5091949350505050565b5f6001600160401b038211156146ea5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016128fe565b5090565b81545f90801561471d5761470784614656600184615b1f565b54600160201b90046001600160e01b031661092e565b509092915050565b5f81815260018301602052604081205461476a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610932565b505f610932565b5f80805f19858709858702925082811083820303915050805f036147a85783828161479e5761479e615d3a565b049250505061087d565b8084116147ef5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016128fe565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f614863868686614771565b9050600183600281111561487957614879615d4e565b14801561489557505f848061489057614890615d3a565b868809115b156114e7576108b3600182615d62565b6148b983836001600160401b0384166149e3565b505050565b5f6001600160ff1b038211156146ea5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016128fe565b80600f81900b811461498b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016128fe565b919050565b5f5b81831015610a81575f6149a58484614ae6565b5f8781526020902090915063ffffffff86169082015463ffffffff1611156149cf578092506149dd565b6149da816001615d62565b93505b50614992565b82548015614a99575f6149fb85614656600185615b1f565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509085161015614a4d5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614a975782614a6e86614656600186615b1f565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f614af46002848418615d75565b61087d90848416615d62565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b3657614b36614b00565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6457614b64614b00565b604052919050565b6001600160a01b03811681146131c9575f5ffd5b803563ffffffff8116811461498b575f5ffd5b5f60408284031215614ba3575f5ffd5b604080519081016001600160401b0381118282101715614bc557614bc5614b00565b6040529050808235614bd681614b6c565b8152614be460208401614b80565b60208201525092915050565b5f60408284031215614c00575f5ffd5b61087d8383614b93565b5f5f5f60808486031215614c1c575f5ffd5b8335614c2781614b6c565b9250614c368560208601614b93565b91506060840135614c4681614b6c565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff169082015260608101610932565b5f5f60608385031215614c95575f5ffd5b8235614ca081614b6c565b9150614caf8460208501614b93565b90509250929050565b5f60208284031215614cc8575f5ffd5b5035919050565b5f60208284031215614cdf575f5ffd5b813561087d81614b6c565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614d4357614d2d868351614cea565b6040959095019460209190910190600101614d1a565b5093949350505050565b602081525f61087d6020830184614d08565b5f5f83601f840112614d6f575f5ffd5b5081356001600160401b03811115614d85575f5ffd5b6020830191508360208260051b8501011115611045575f5ffd5b5f5f5f60408486031215614db1575f5ffd5b8335614dbc81614b6c565b925060208401356001600160401b03811115614dd6575f5ffd5b614de286828701614d5f565b9497909650939450505050565b5f6001600160401b03821115614e0757614e07614b00565b5060051b60200190565b5f82601f830112614e20575f5ffd5b8135614e33614e2e82614def565b614b3c565b8082825260208201915060208360051b860101925085831115614e54575f5ffd5b602085015b83811015614e7a578035614e6c81614b6c565b835260209283019201614e59565b5095945050505050565b5f5f5f60808486031215614e96575f5ffd5b614ea08585614b93565b925060408401356001600160401b03811115614eba575f5ffd5b614ec686828701614e11565b92505060608401356001600160401b03811115614ee1575f5ffd5b614eed86828701614e11565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614d43578151865260209586019590910190600101614f09565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f7e57603f19878603018452614f69858351614ef7565b94506020938401939190910190600101614f4d565b50929695505050505050565b5f5f5f5f60a08587031215614f9d575f5ffd5b614fa78686614b93565b935060408501356001600160401b03811115614fc1575f5ffd5b614fcd87828801614e11565b93505060608501356001600160401b03811115614fe8575f5ffd5b614ff487828801614e11565b92505061500360808601614b80565b905092959194509250565b5f5f5f5f5f60608688031215615022575f5ffd5b853561502d81614b6c565b945060208601356001600160401b03811115615047575f5ffd5b61505388828901614d5f565b90955093505060408601356001600160401b03811115615071575f5ffd5b61507d88828901614d5f565b969995985093965092949392505050565b5f5f6040838503121561509f575f5ffd5b82356150aa81614b6c565b915060208301356001600160401b038111156150c4575f5ffd5b830160a081860312156150d5575f5ffd5b809150509250929050565b828152604060208201525f610b716040830184614ef7565b5f5f60408385031215615109575f5ffd5b823561511481614b6c565b915060208301356150d581614b6c565b5f8151808452602084019350602083015f5b82811015614d435761516f86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101615136565b604081525f6151976040830185614d08565b82810360208401526114e78185615124565b5f8151808452602084019350602083015f5b82811015614d435781516001600160a01b03168652602095860195909101906001016151bb565b602081525f61087d60208301846151a9565b5f5f60408385031215615205575f5ffd5b82356001600160401b0381111561521a575f5ffd5b61522685828601614e11565b92505060208301356150d581614b6c565b602080825282518282018190525f918401906040840190835b818110156152775783516001600160401b0316835260209384019390920191600101615250565b509095945050505050565b5f5f5f5f60608587031215615295575f5ffd5b84356152a081614b6c565b93506152ae60208601614b80565b925060408501356001600160401b038111156152c8575f5ffd5b6152d487828801614d5f565b95989497509550505050565b5f5f604083850312156152f1575f5ffd5b82356152fc81614b6c565b915060208301356001600160401b03811115615316575f5ffd5b613e6b85828601614e11565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615368575f5ffd5b823561537381614b6c565b9150614caf60208401614b80565b5f60208284031215615391575f5ffd5b813560ff8116811461087d575f5ffd5b5f606082840312156153b1575f5ffd5b50919050565b5f602082840312156153c7575f5ffd5b81356001600160401b038111156153dc575f5ffd5b61092e848285016153a1565b5f5f5f608084860312156153fa575f5ffd5b83356001600160401b0381111561540f575f5ffd5b61541b86828701614e11565b935050614c368560208601614b93565b602081525f61087d6020830184615124565b5f5f5f6060848603121561544f575f5ffd5b833561545a81614b6c565b925060208401356001600160401b03811115615474575f5ffd5b61548086828701614e11565b92505061548f60408501614b80565b90509250925092565b5f5f604083850312156154a9575f5ffd5b82356154b481614b6c565b915060208301356001600160401b038111156154ce575f5ffd5b8301601f810185136154de575f5ffd5b80356154ec614e2e82614def565b8082825260208201915060208360051b85010192508783111561550d575f5ffd5b602084015b838110156156325780356001600160401b0381111561552f575f5ffd5b85016080818b03601f19011215615544575f5ffd5b61554c614b14565b6155598b60208401614b93565b815260608201356001600160401b03811115615573575f5ffd5b6155828c602083860101614e11565b60208301525060808201356001600160401b038111156155a0575f5ffd5b6020818401019250508a601f8301126155b7575f5ffd5b81356155c5614e2e82614def565b8082825260208201915060208360051b86010192508d8311156155e6575f5ffd5b6020850194505b8285101561561c5784356001600160401b038116811461560b575f5ffd5b8252602094850194909101906155ed565b6040840152505084525060209283019201615512565b50809450505050509250929050565b5f5f5f60408486031215615653575f5ffd5b833561565e81614b6c565b925060208401356001600160401b03811115615678575f5ffd5b8401601f81018613615688575f5ffd5b80356001600160401b0381111561569d575f5ffd5b8660208284010111156156ae575f5ffd5b939660209190910195509293505050565b5f5f604083850312156156d0575f5ffd5b82356156db81614b6c565b915060208301356001600160401b038111156156f5575f5ffd5b613e6b858286016153a1565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112615729575f5ffd5b9190910192915050565b5f60208284031215615743575f5ffd5b61087d82614b80565b5f5f8335601e19843603018112615761575f5ffd5b8301803591506001600160401b0382111561577a575f5ffd5b6020019150600581901b3603821315611045575f5ffd5b5f602082840312156157a1575f5ffd5b813561ffff8116811461087d575f5ffd5b5f602082840312156157c2575f5ffd5b8151801515811461087d575f5ffd5b604081016109328284614cea565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610932576109326157df565b8183526020830192505f815f5b84811015614d435763ffffffff61583283614b80565b168652602095860195919091019060010161581c565b6001600160a01b038581168252841660208201526060604082018190525f906108b3908301848661580f565b6001600160a01b038616815260c081016158916020830187614cea565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610b716020830184866158c5565b5f5f8335601e19843603018112615915575f5ffd5b8301803591506001600160401b0382111561592e575f5ffd5b602001915036819003821315611045575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f9061596e908301868861580f565b82810360608401526159818185876158c5565b9998505050505050505050565b6060810161599c8285614cea565b6001600160a01b039290921660409190910152919050565b805160208083015191908110156153b1575f1960209190910360031b1b16919050565b604081525f6159e960408301856151a9565b82810360208401526114e781856151a9565b5f60208284031215615a0b575f5ffd5b81516001600160401b03811115615a20575f5ffd5b8201601f81018413615a30575f5ffd5b8051615a3e614e2e82614def565b8082825260208201915060208360051b850101925086831115615a5f575f5ffd5b602084015b83811015615afc5780516001600160401b03811115615a81575f5ffd5b8501603f81018913615a91575f5ffd5b6020810151615aa2614e2e82614def565b808282526020820191506020808460051b8601010192508b831115615ac5575f5ffd5b6040840193505b82841015615ae7578351825260209384019390910190615acc565b86525050602093840193919091019050615a64565b509695505050505050565b5f60018201615b1857615b186157df565b5060010190565b81810381811115610932576109326157df565b6001600160401b038281168282160390811115610932576109326157df565b5f81600f0b60016001607f1b03198103615b6d57615b6d6157df565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610932576109326157df565b6001600160a01b038716815260e08101615bbf6020830188614cea565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f60208284031215615c05575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615c2a602084018a614cea565b60c060608401528690528660e083015f5b88811015615c6b578235615c4e81614b6c565b6001600160a01b0316825260209283019290910190600101615c3b565b508381036080850152615c7e8188614ef7565b91505082810360a0840152615c948185876158c5565b9a9950505050505050505050565b5f81615cb057615cb06157df565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610932576109326157df565b5f60208284031215615cf4575f5ffd5b815161087d81614b6c565b8082018281125f831280158216821582161715615d1e57615d1e6157df565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b80820180821115610932576109326157df565b5f82615d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220e6558cc233ddec01b4f105ba85995f702aa766ccaa81881e2e04ab296beac9d464736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_allocationManagerView\",\"type\":\"address\",\"internalType\":\"contractIAllocationManagerView\"},{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_DEALLOCATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_ALLOCATION_CONFIGURATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategiesToOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearDeallocationQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToClear\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParamsV2[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParamsV2[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterFromOperatorSets\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.DeregisterParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"allocatableMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"allocation\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"maxMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"maxMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"maxMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"memberCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"count\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlasher\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"pendingSlasher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"slashCount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"allocations\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"result\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"result\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"result\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateSlashers\",\"inputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.AllocateParams[]\",\"components\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"newMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerForOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.RegisterParams\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.SlashingParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadsToSlash\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"viewImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherMigrated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"Empty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSnapshotOrdering\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetAlreadyMigrated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SlasherNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", + Bin: "0x610160604052348015610010575f5ffd5b5060405161599e38038061599e83398101604081905261002f91610192565b868387878585896001600160a01b03811661005d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c05263ffffffff90811660e052166101005290811661012052166101405261009b6100a7565b50505050505050610221565b5f54610100900460ff16156101125760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610161575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610177575f5ffd5b50565b805163ffffffff8116811461018d575f5ffd5b919050565b5f5f5f5f5f5f5f60e0888a0312156101a8575f5ffd5b87516101b381610163565b60208901519097506101c481610163565b60408901519096506101d581610163565b60608901519095506101e681610163565b60808901519094506101f781610163565b925061020560a0890161017a565b915061021360c0890161017a565b905092959891949750929550565b60805160a05160c05160e05161010051610120516101405161569261030c5f395f81816103860152818161093f01528181610a1f01528181610a4e01528181610a9801528181610ac301528181610d1f01528181610fc3015281816120f301526123ce01525f81816105800152818161198a015261374501525f81816106b701528181613439015261362701525f818161047b015281816112f3015261171401525f818161084d01526132cb01525f818161088201528181610ec501528181610f1301528181611c1d0152612ebb01525f81816106de0152818161261d0152613c0201526156925ff3fe608060405234801561000f575f5ffd5b506004361061037d575f3560e01c80636cfb4481116101d4578063b66bd98911610109578063d7794857116100a9578063f231bd0811610079578063f231bd08146108a4578063f605ce0814610679578063fabc1cbc146108b7578063fe4b84df146108ca575f5ffd5b8063d779485714610811578063db4df76114610848578063dc2af6921461086f578063df5cf7231461087d575f5ffd5b8063c221d8ae116100e4578063c221d8ae146107c5578063d1a83f54146107d8578063d3d96ff4146107eb578063d4a3fcce146107fe575f5ffd5b8063b66bd98914610775578063b9fbaed114610788578063ba1a84e5146107b7575f5ffd5b806394d7d00c11610174578063a9333ec81161014f578063a9333ec814610679578063a98218211461074f578063adc2e3d914610762578063b2447af7146105d0575f5ffd5b806394d7d00c1461071b578063952899ee14610729578063957dc50b1461073c575f5ffd5b806379ae50cd116101af57806379ae50cd146104305780637bc1ef61146106b2578063886f1195146106d95780638ce6485414610700575f5ffd5b80636cfb4481146106795780636e3492b51461069f5780636e875dba14610560575f5ffd5b80633dff8e7d116102b557806350feea20116102555780635ac86ab7116102255780635ac86ab7146106285780635c975abb1461064b578063670d3ba2146106535780636c9d7c5814610666575f5ffd5b806350feea20146105ec578063547afb87146105ff57806356c483e61461060d578063595c6a6714610620575f5ffd5b80634657e26a116102905780634657e26a1461057b5780634a10ffe5146105a25780634b5046ef146105bd5780634cfd2939146105d0575f5ffd5b80633dff8e7d1461052c57806340120dab1461053f5780634177a87c14610560575f5ffd5b8063261f84e0116103205780632bab2c4a116102fb5780632bab2c4a146104d2578063304c10cd146104e557806332a879e4146104f8578063363520571461050b575f5ffd5b8063261f84e0146104635780632981eb77146104765780632b453a9a146104b2575f5ffd5b80631352c3e61161035b5780631352c3e6146103f8578063136439dd1461041b57806315fe502814610430578063260dc75814610450575f5ffd5b80630b156bb6146103815780630f3df50e146103c557806310e1b9b8146103d8575b5f5ffd5b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6103a86103d33660046143aa565b6108dd565b6103eb6103e63660046143c4565b61091e565b6040516103bc919061440b565b61040b61040636600461443e565b610963565b60405190151581526020016103bc565b61042e610429366004614472565b6109de565b005b61044361043e366004614489565b610a18565b6040516103bc9190614507565b61040b61045e3660046143aa565b610a48565b61042e610471366004614559565b610a72565b61049d7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103bc565b6104c56104c036600461463e565b610a91565b6040516103bc91906146e1565b6104c56104e0366004614744565b610abc565b6103a86104f3366004614489565b610aef565b61042e6105063660046147c8565b610b1e565b61051e610519366004614848565b610b46565b6040516103bc92919061489a565b61042e61053a366004614990565b610c9b565b61055261054d3660046149dc565b610d17565b6040516103bc929190614a69565b61056e61043e3660046143aa565b6040516103bc9190614a8d565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b6105b06104c0366004614ad8565b6040516103bc9190614b1f565b61042e6105cb3660046147c8565b610d4a565b6105de61045e3660046143aa565b6040519081526020016103bc565b61042e6105fa366004614b5f565b610de6565b6105b06104c0366004614559565b61042e61061b366004614bbd565b610eba565b61042e610fa9565b61040b610636366004614be7565b606654600160ff9092169190911b9081161490565b6066546105de565b61040b61066136600461443e565b610fbd565b61042e610674366004614c07565b610fe7565b6106876106613660046149dc565b6040516001600160401b0390911681526020016103bc565b61042e6106ad366004614c48565b61107d565b61049d7f000000000000000000000000000000000000000000000000000000000000000081565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61070e6104c0366004614c79565b6040516103bc9190614cbc565b6105b06104e0366004614cce565b61042e610737366004614d25565b611438565b61042e61074a366004614ece565b6118c9565b61042e61075d366004614f5e565b611b54565b61042e610770366004614fdc565b611be9565b61042e610783366004614b5f565b611f15565b61079b610796366004614489565b612052565b60408051921515835263ffffffff9091166020830152016103bc565b6105de61045e366004614489565b61056e6107d336600461443e565b6120ec565b61042e6107e636600461501e565b612117565b61042e6107f93660046149dc565b612230565b6103a861080c3660046143aa565b612340565b61082461081f3660046143aa565b6123c7565b604080516001600160a01b03909316835263ffffffff9091166020830152016103bc565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61040b61045e366004614489565b6103a87f000000000000000000000000000000000000000000000000000000000000000081565b61040b6108b23660046143aa565b6123f7565b61042e6108c5366004614472565b612416565b61042e6108d8366004614472565b612483565b5f5f60a65f6108eb85612594565b815260208101919091526040015f20546001600160a01b0316905080156109125780610917565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101919091526109177f00000000000000000000000000000000000000000000000000000000000000006125f7565b6001600160a01b0382165f908152609e6020526040812081908161098685612594565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff16928201929092529150806109d45750806020015163ffffffff164311155b9150505b92915050565b6109e6612608565b6066548181168114610a0b5760405163c61dca5d60e01b815260040160405180910390fd5b610a14826126ab565b5050565b6060610a437f00000000000000000000000000000000000000000000000000000000000000006125f7565b919050565b5f610a437f00000000000000000000000000000000000000000000000000000000000000006125f7565b82610a7c816126e8565b610a8b8461053a858588612711565b50505050565b60606109177f00000000000000000000000000000000000000000000000000000000000000006125f7565b6060610ae77f00000000000000000000000000000000000000000000000000000000000000006125f7565b949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610b175780610917565b5090919050565b84610b28816126e8565b610b3e86610b3787878a612711565b8585612117565b505050505050565b5f60606001610b5481612888565b5f6040518060400160405280876001600160a01b03168152602001866020016020810190610b82919061507d565b63ffffffff1690529050610b996060860186615096565b9050610ba86040870187615096565b905014610bc8576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610bfa9163ffffffff908116906128b316565b610c1757604051631fb1705560e21b815260040160405180910390fd5b610c2d610c276020870187614489565b82610963565b610c4a5760405163ebbff49760e01b815260040160405180910390fd5b610c5381612340565b6001600160a01b0316336001600160a01b031614610c84576040516348f5c3ed60e01b815260040160405180910390fd5b610c8e85826128ca565b9350935050509250929050565b81610ca5816126e8565b6001600160a01b0383165f90815260a4602052604090205460ff16610cdd576040516348f7dbb960e01b815260040160405180910390fd5b5f5b8251811015610a8b57610d0f84848381518110610cfe57610cfe6150db565b6020026020010151620e16e4613025565b600101610cdf565b606080610d437f00000000000000000000000000000000000000000000000000000000000000006125f7565b9250929050565b5f610d5481612888565b838214610d74576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610ddd57610dd587878784818110610d9457610d946150db565b9050602002016020810190610da99190614489565b868685818110610dbb57610dbb6150db565b9050602002016020810190610dd091906150ef565b613197565b600101610d76565b50505050505050565b83610df0816126e8565b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f93845260989052939091209192610e2f92916128b316565b610e4c57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610ddd57610eb282868684818110610e6c57610e6c6150db565b9050602002016020810190610e819190614489565b610ead60405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506123f7565b61329b565b600101610e4e565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610f9957610ef4836126e8565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015610f58573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7c9190615110565b610f995760405163ccea9e6f60e01b815260040160405180910390fd5b610fa483838361337b565b505050565b610fb1612608565b610fbb5f196126ab565b565b5f6109d87f00000000000000000000000000000000000000000000000000000000000000006125f7565b8151610ff2816126e8565b60208084015184516001600160a01b03165f908152609890925260409091206110249163ffffffff908116906128b316565b61104157604051631fb1705560e21b815260040160405180910390fd5b5f61104b84612340565b6001600160a01b0316036110725760405163255b0f4160e01b815260040160405180910390fd5b610fa483835f61354b565b600261108881612888565b61109d6110986020840184614489565b613707565b806110b657506110b66110986040840160208501614489565b6110d3576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b6110e26040840184615096565b90508110156113a4575f604051806040016040528085602001602081019061110a9190614489565b6001600160a01b031681526020016111256040870187615096565b85818110611135576111356150db565b905060200201602081019061114a919061507d565b63ffffffff168152509050611197816020015163ffffffff1660985f8760200160208101906111799190614489565b6001600160a01b0316815260208101919091526040015f20906128b3565b6111b457604051631fb1705560e21b815260040160405180910390fd5b609e5f6111c46020870187614489565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6111ed83612594565b815260208101919091526040015f205460ff1661121d576040516325131d4f60e01b815260040160405180910390fd5b61125761122982612594565b609c5f6112396020890189614489565b6001600160a01b0316815260208101919091526040015f20906137b0565b5061128f6112686020860186614489565b609a5f61127485612594565b81526020019081526020015f206137bb90919063ffffffff16565b5061129d6020850185614489565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe826040516112d5919061512f565b60405180910390a2604080518082019091525f8152602081016113187f000000000000000000000000000000000000000000000000000000000000000043615151565b63ffffffff169052609e5f6113306020880188614489565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61135984612594565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff1990931692909217179055506001016110d5565b506113b86104f36040840160208501614489565b6001600160a01b031663303ca9566113d36020850185614489565b6113e36040860160208701614489565b6113f06040870187615096565b6040518563ffffffff1660e01b815260040161140f94939291906151a6565b5f604051808303815f87803b158015611426575f5ffd5b505af1158015610b3e573d5f5f3e3d5ffd5b5f61144281612888565b61144b836126e8565b5f5f5f61145786612052565b91509150816114795760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b83518110156118c25783818151811061149a5761149a6150db565b602002602001015160400151518482815181106114b9576114b96150db565b60200260200101516020015151146114e4576040516343714afd60e01b815260040160405180910390fd5b5f8482815181106114f7576114f76150db565b602090810291909101810151518082015181516001600160a01b03165f908152609890935260409092209092506115379163ffffffff908116906128b316565b61155457604051631fb1705560e21b815260040160405180910390fd5b5f61155f8783610963565b90505f5b868481518110611575576115756150db565b602002602001015160200151518110156118b7575f87858151811061159c5761159c6150db565b60200260200101516020015182815181106115b9576115b96150db565b602002602001015190506115d0898261ffff613197565b5f5f6115e58b6115df88612594565b856137cf565b91509150806040015163ffffffff165f1461161357604051630d8fcbe360e41b815260040160405180910390fd5b5f6116208785848961393b565b9050611665825f01518c8a8151811061163b5761163b6150db565b6020026020010151604001518781518110611658576116586150db565b6020026020010151613973565b600f0b602083018190525f0361168e57604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b12156117d25780156117545761170f6116af88612594565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b6117397f000000000000000000000000000000000000000000000000000000000000000043615151565b611744906001615151565b63ffffffff16604083015261183f565b6117668360200151836020015161398a565b6001600160401b031660208401528a518b9089908110611788576117886150db565b60200260200101516040015185815181106117a5576117a56150db565b6020908102919091018101516001600160401b031683525f9083015263ffffffff4316604083015261183f565b5f8260200151600f0b131561183f576117f38360200151836020015161398a565b6001600160401b03908116602085018190528451909116101561182957604051636c9be0bf60e01b815260040160405180910390fd5b6118338943615151565b63ffffffff1660408301525b6118548c61184c89612594565b8686866139a9565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611889865f0151876020015161398a565b866040015160405161189f9594939291906151d2565b60405180910390a15050600190920191506115639050565b50505060010161147f565b5050505050565b5f5b8151811015610a14576119488282815181106118e9576118e96150db565b60200260200101516020015163ffffffff1660985f858581518110611910576119106150db565b60200260200101515f01516001600160a01b03166001600160a01b031681526020019081526020015f206128b390919063ffffffff16565b15611b4c575f6001600160a01b031661197983838151811061196c5761196c6150db565b6020026020010151612340565b6001600160a01b031603611b4c575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663fddbdefd8484815181106119c9576119c96150db565b6020908102919091010151516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152633635205760e01b60448201526064015f60405180830381865afa158015611a29573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a509190810190615223565b90505f81515f1480611a8c57505f6001600160a01b0316825f81518110611a7957611a796150db565b60200260200101516001600160a01b0316145b15611ab557838381518110611aa357611aa36150db565b60200260200101515f01519050611ad2565b815f81518110611ac757611ac76150db565b602002602001015190505b611af7848481518110611ae757611ae76150db565b602002602001015182600161354b565b7ff0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725848481518110611b2a57611b2a6150db565b602002602001015182604051611b419291906152b2565b60405180910390a150505b6001016118cb565b82611b5e816126e8565b6001600160a01b0384165f90815260a4602052604090205460ff16611ba0576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c9437138484604051611bdb929190615300565b60405180910390a250505050565b6002611bf481612888565b82611bfe816126e8565b6040516336b87bd760e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611c62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c869190615110565b611ca35760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b611cb26020850185615096565b9050811015611e7a57604080518082019091525f9080611cd56020880188614489565b6001600160a01b03168152602001868060200190611cf39190615096565b85818110611d0357611d036150db565b9050602002016020810190611d18919061507d565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350611d549291908116906128b316565b611d7157604051631fb1705560e21b815260040160405180910390fd5b611d7b8682610963565b15611d9957604051636c6c6e2760e11b815260040160405180910390fd5b611dc2611da582612594565b6001600160a01b0388165f908152609c6020526040902090613be1565b50611dee86609a5f611dd385612594565b81526020019081526020015f20613bec90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e82604051611e28919061512f565b60405180910390a26001600160a01b0386165f908152609e60205260408120600191611e5384612594565b815260208101919091526040015f20805460ff191691151591909117905550600101611ca5565b50611e8b6104f36020850185614489565b6001600160a01b031663c63fd50285611ea76020870187614489565b611eb46020880188615096565b611ec160408a018a615313565b6040518763ffffffff1660e01b8152600401611ee296959493929190615355565b5f604051808303815f87803b158015611ef9575f5ffd5b505af1158015611f0b573d5f5f3e3d5ffd5b5050505050505050565b83611f1f816126e8565b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f93845260989052939091209192611f5e92916128b316565b611f7b57604051631fb1705560e21b815260040160405180910390fd5b5f611f8582612594565b90505f5b84811015611f0b57611fce868683818110611fa657611fa66150db565b9050602002016020810190611fbb9190614489565b5f848152609960205260409020906137bb565b611feb576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061201f5761201f6150db565b90506020020160208101906120349190614489565b6040516120429291906152b2565b60405180910390a1600101611f89565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b9091041660608201819052849391929190158015906120d35750826060015163ffffffff164310155b156120e2575050604081015160015b9590945092505050565b60606109d87f00000000000000000000000000000000000000000000000000000000000000006125f7565b83612121816126e8565b83518214612142576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0385165f90815260a4602052604090205460ff1661217a576040516348f7dbb960e01b815260040160405180910390fd5b5f5b8451811015610b3e575f848483818110612198576121986150db565b90506020020160208101906121ad9190614489565b90506001600160a01b0381166121d6576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601612203576040516364be1a3f60e11b815260040160405180910390fd5b61222787878481518110612219576122196150db565b602002602001015183613025565b5060010161217c565b8161223a816126e8565b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa15801561227e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a29190615110565b6122bf57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361231781610aef565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f60a75f61234e85612594565b815260208082019290925260409081015f20815160608101835281546001600160a01b0390811680835260019093015490811694820194909452600160a01b90930463ffffffff16918301829052919250158015906123b75750816040015163ffffffff164310155b1561091757506020015192915050565b5f5f6123f27f00000000000000000000000000000000000000000000000000000000000000006125f7565b915091565b5f620e16e4612405836108dd565b6001600160a01b0316141592915050565b61241e613c00565b606654801982198116146124455760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff16158080156124a157505f54600160ff909116105b806124ba5750303b1580156124ba57505f5460ff166001145b6125225760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612543575f805461ff0019166101001790555b61254c826126ab565b8015610a14575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016125df92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526109d8906153a1565b613cb180610fa48363ffffffff8316565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561266a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268e9190615110565b610fbb57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6126f181613707565b61270e5760405163932d94f760e01b815260040160405180910390fd5b50565b60605f836001600160401b0381111561272c5761272c6142ba565b60405190808252806020026020018201604052801561278e57816020015b61277b60405180606001604052805f63ffffffff168152602001606081526020015f6001600160a01b031681525090565b81526020019060019003908161274a5790505b5090505f5b8481101561287f5760405180606001604052808787848181106127b8576127b86150db565b90506020028101906127ca91906153c4565b6127d890602081019061507d565b63ffffffff1681526020018787848181106127f5576127f56150db565b905060200281019061280791906153c4565b612815906020810190615096565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050908252506001600160a01b038616602090910152825183908390811061286c5761286c6150db565b6020908102919091010152600101612793565b50949350505050565b606654600160ff83161b9081160361270e5760405163840a48d560e01b815260040160405180910390fd5b5f8181526001830160205260408120541515610917565b5f6060816128db6040860186615096565b90506001600160401b038111156128f4576128f46142ba565b60405190808252806020026020018201604052801561291d578160200160208202803683370190505b50905061292d6040860186615096565b90506001600160401b03811115612946576129466142ba565b60405190808252806020026020018201604052801561296f578160200160208202803683370190505b50915060a55f61297e86612594565b81526020019081526020015f205f8154612997906153e2565b918290555092505f5b6129ad6040870187615096565b9050811015612fb757801580612a4057506129cb6040870187615096565b6129d66001846153fa565b8181106129e5576129e56150db565b90506020020160208101906129fa9190614489565b6001600160a01b0316612a106040880188615096565b83818110612a2057612a206150db565b9050602002016020810190612a359190614489565b6001600160a01b0316115b612a5d57604051639f1c805360e01b815260040160405180910390fd5b612a6a6060870187615096565b82818110612a7a57612a7a6150db565b905060200201355f108015612aba5750670de0b6b3a7640000612aa06060880188615096565b83818110612ab057612ab06150db565b9050602002013511155b612ad757604051631353603160e01b815260040160405180910390fd5b612b33612ae76040880188615096565b83818110612af757612af76150db565b9050602002016020810190612b0c9190614489565b60995f612b1889612594565b81526020019081526020015f20613ccf90919063ffffffff16565b612b50576040516331bc342760e11b815260040160405180910390fd5b5f80612ba2612b6260208a018a614489565b612b6b89612594565b612b7860408c018c615096565b87818110612b8857612b886150db565b9050602002016020810190612b9d9190614489565b6137cf565b805191935091506001600160401b03165f03612bbf575050612faf565b5f612bfa612bd060608b018b615096565b86818110612be057612be06150db565b85516001600160401b031692602090910201359050613cf0565b8351909150612c156001600160401b03808416908316613d06565b868681518110612c2757612c276150db565b60200260200101818152505081835f01818151612c44919061540d565b6001600160401b0316905250835182908590612c6190839061540d565b6001600160401b0316905250602084018051839190612c8190839061540d565b6001600160401b031690525060208301515f600f9190910b1215612d99575f612ce4612cb060608d018d615096565b88818110612cc057612cc06150db565b905060200201358560200151612cd59061542c565b6001600160801b031690613cf0565b9050806001600160401b031684602001818151612d019190615450565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd612d3560208d018d614489565b8b612d4360408f018f615096565b8a818110612d5357612d536150db565b9050602002016020810190612d689190614489565b612d79885f0151896020015161398a565b8860400151604051612d8f9594939291906151d2565b60405180910390a1505b612deb612da960208c018c614489565b612db28b612594565b612dbf60408e018e615096565b89818110612dcf57612dcf6150db565b9050602002016020810190612de49190614489565b87876139a9565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd612e1960208c018c614489565b8a612e2760408e018e615096565b89818110612e3757612e376150db565b9050602002016020810190612e4c9190614489565b8651604051612e60949392919043906151d2565b60405180910390a1612eb1612e7860208c018c614489565b612e8560408d018d615096565b88818110612e9557612e956150db565b9050602002016020810190612eaa9190614489565b8651613d1a565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635ae679a7612eed60208d018d614489565b8b8b8e8060400190612eff9190615096565b8b818110612f0f57612f0f6150db565b9050602002016020810190612f249190614489565b89516040516001600160e01b031960e088901b168152612f4c9594939291899160040161547d565b6020604051808303815f875af1158015612f68573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f8c91906154d0565b878681518110612f9e57612f9e6150db565b602002602001018181525050505050505b6001016129a0565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe5612fe66020870187614489565b85612ff46040890189615096565b8561300260808c018c615313565b60405161301597969594939291906154e7565b60405180910390a1509250929050565b6040805180820182526001600160a01b038516808252845163ffffffff90811660208085018290525f938452609890529390912091926130669291613be116565b61308357604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c816040516130b2919061512f565b60405180910390a16001600160a01b038216620e16e414801590613147578260a65f6130dd85612594565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e828460405161313e9291906152b2565b60405180910390a15b5f5b8460200151518110156131865761317e8386602001518381518110613170576131706150db565b60200260200101518461329b565b600101613149565b506118c2828560400151600161354b565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f811180156131e157508261ffff1682105b156118c2576001600160a01b038086165f90815260a360209081526040808320938816835292905290812061321590613d9c565b90505f5f6132248884896137cf565b91509150806040015163ffffffff16431015613242575050506118c2565b61324f88848985856139a9565b6001600160a01b038089165f90815260a360209081526040808320938b1683529290522061327c90613dee565b50613286856153e2565b94506132918461557d565b93505050506131cf565b801561331d576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01480159061330057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b61331d57604051632711b74d60e11b815260040160405180910390fd5b61332d8260995f611dd387612594565b61334a5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b83836040516123339291906152b2565b6001600160a01b0383165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b9092041660608201819052158015906133f75750806060015163ffffffff164310155b1561341157604081015163ffffffff168152600160208201525b63ffffffff8316604082015281156134345763ffffffff43166060820152613475565b61345e7f000000000000000000000000000000000000000000000000000000000000000043615151565b613469906001615151565b63ffffffff1660608201525b6001600160a01b0384165f818152609b60209081526040918290208451815486840151878601516060808a015163ffffffff95861664ffffffffff1990951694909417600160201b93151593909302929092176cffffffffffffffff0000000000191665010000000000918516919091026cffffffff000000000000000000191617600160481b92841692830217909355845195865290881692850192909252918301527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db91015b60405180910390a150505050565b6001600160a01b038216613572576040516339b190bb60e11b815260040160405180910390fd5b5f60a75f61357f86612594565b815260208082019290925260409081015f20815160608101835281546001600160a01b03908116825260019092015491821693810193909352600160a01b900463ffffffff16908201819052909150158015906135e65750806040015163ffffffff164310155b156135fc5760208101516001600160a01b031681525b6001600160a01b038316602082015281156136225763ffffffff43166040820152613663565b61364c7f000000000000000000000000000000000000000000000000000000000000000043615151565b613657906001615151565b63ffffffff1660408201525b8060a75f61367087612594565b815260208082019290925260409081015f20835181546001600160a01b039182166001600160a01b031990911617825592840151600190910180549483015163ffffffff16600160a01b026001600160c01b031990951691909316179290921790558181015190517f3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f579161353d9187918791615592565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa15801561378c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d89190615110565b5f6109178383613e6b565b5f610917836001600160a01b038416613e6b565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a184528685209088168552909252938220929392819061382f90613f4e565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff169181018290529192504310156138d1579092509050613933565b6138e2815f0151826020015161398a565b6001600160401b0316815260208101515f600f9190910b1215613920576139118260200151826020015161398a565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b5f61394c8460995f612b1889612594565b80156139555750815b801561396a575082516001600160401b031615155b95945050505050565b5f6109176001600160401b038085169084166155c5565b5f6109176139a1836001600160401b038616615450565b600f0b613f61565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613a6f57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b15613b51576001600160a01b0385165f908152609f602090815260408083208784529091529020613b299084613bec565b506001600160a01b0385165f908152609d60205260409020613b4b9085613be1565b506118c2565b80516001600160401b03165f036118c2576001600160a01b0385165f908152609f602090815260408083208784529091529020613b8e90846137bb565b506001600160a01b0385165f908152609f602090815260408083208784529091529020613bba90613fcc565b5f036118c2576001600160a01b0385165f908152609d60205260409020610b3e90856137b0565b5f6109178383613fd5565b5f610917836001600160a01b038416613fd5565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c5c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c8091906155f2565b6001600160a01b0316336001600160a01b031614610fbb5760405163794821ff60e01b815260040160405180910390fd5b365f5f375f5f365f845af43d5f5f3e808015613ccb573d5ff35b3d5ffd5b6001600160a01b0381165f9081526001830160205260408120541515610917565b5f6109178383670de0b6b3a76400006001614021565b5f61091783670de0b6b3a76400008461407a565b6001600160a01b038084165f90815260a160209081526040808320938616835292905220613d4990438361415f565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612333565b5f613db68254600f81810b600160801b909204900b131590565b15613dd457604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f613e088254600f81810b600160801b909204900b131590565b15613e2657604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f8181526001830160205260408120548015613f45575f613e8d6001836153fa565b85549091505f90613ea0906001906153fa565b9050818114613eff575f865f018281548110613ebe57613ebe6150db565b905f5260205f200154905080875f018481548110613ede57613ede6150db565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080613f1057613f1061560d565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506109d8565b5f9150506109d8565b5f6109d882670de0b6b3a7640000614173565b5f6001600160401b03821115613fc85760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401612519565b5090565b5f6109d8825490565b5f81815260018301602052604081205461401a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556109d8565b505f6109d8565b5f5f61402e86868661407a565b9050600183600281111561404457614044615621565b14801561406057505f848061405b5761405b615635565b868809115b1561396a57614070600182615649565b9695505050505050565b5f80805f19858709858702925082811083820303915050805f036140b1578382816140a7576140a7615635565b0492505050610917565b8084116140f85760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612519565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b610fa483836001600160401b0384166141b7565b81545f9080156141af576141998461418c6001846153fa565b5f91825260209091200190565b54600160201b90046001600160e01b03166109d4565b509092915050565b8254801561426d575f6141cf8561418c6001856153fa565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090851610156142215760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff80861691160361426b57826142428661418c6001866153fa565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156142f0576142f06142ba565b60405290565b604051601f8201601f191681016001600160401b038111828210171561431e5761431e6142ba565b604052919050565b6001600160a01b038116811461270e575f5ffd5b803563ffffffff81168114610a43575f5ffd5b5f6040828403121561435d575f5ffd5b604080519081016001600160401b038111828210171561437f5761437f6142ba565b604052905080823561439081614326565b815261439e6020840161433a565b60208201525092915050565b5f604082840312156143ba575f5ffd5b610917838361434d565b5f5f5f608084860312156143d6575f5ffd5b83356143e181614326565b92506143f0856020860161434d565b9150606084013561440081614326565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff1690820152606081016109d8565b5f5f6060838503121561444f575f5ffd5b823561445a81614326565b9150614469846020850161434d565b90509250929050565b5f60208284031215614482575f5ffd5b5035919050565b5f60208284031215614499575f5ffd5b813561091781614326565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b828110156144fd576144e78683516144a4565b60409590950194602091909101906001016144d4565b5093949350505050565b602081525f61091760208301846144c2565b5f5f83601f840112614529575f5ffd5b5081356001600160401b0381111561453f575f5ffd5b6020830191508360208260051b8501011115610d43575f5ffd5b5f5f5f6040848603121561456b575f5ffd5b833561457681614326565b925060208401356001600160401b03811115614590575f5ffd5b61459c86828701614519565b9497909650939450505050565b5f6001600160401b038211156145c1576145c16142ba565b5060051b60200190565b5f82601f8301126145da575f5ffd5b81356145ed6145e8826145a9565b6142f6565b8082825260208201915060208360051b86010192508583111561460e575f5ffd5b602085015b8381101561463457803561462681614326565b835260209283019201614613565b5095945050505050565b5f5f5f60808486031215614650575f5ffd5b61465a858561434d565b925060408401356001600160401b03811115614674575f5ffd5b614680868287016145cb565b92505060608401356001600160401b0381111561469b575f5ffd5b6146a7868287016145cb565b9150509250925092565b5f8151808452602084019350602083015f5b828110156144fd5781518652602095860195909101906001016146c3565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561473857603f198786030184526147238583516146b1565b94506020938401939190910190600101614707565b50929695505050505050565b5f5f5f5f60a08587031215614757575f5ffd5b614761868661434d565b935060408501356001600160401b0381111561477b575f5ffd5b614787878288016145cb565b93505060608501356001600160401b038111156147a2575f5ffd5b6147ae878288016145cb565b9250506147bd6080860161433a565b905092959194509250565b5f5f5f5f5f606086880312156147dc575f5ffd5b85356147e781614326565b945060208601356001600160401b03811115614801575f5ffd5b61480d88828901614519565b90955093505060408601356001600160401b0381111561482b575f5ffd5b61483788828901614519565b969995985093965092949392505050565b5f5f60408385031215614859575f5ffd5b823561486481614326565b915060208301356001600160401b0381111561487e575f5ffd5b830160a0818603121561488f575f5ffd5b809150509250929050565b828152604060208201525f610ae760408301846146b1565b5f82601f8301126148c1575f5ffd5b81356148cf6145e8826145a9565b8082825260208201915060208360051b8601019250858311156148f0575f5ffd5b602085015b838110156146345780356001600160401b03811115614912575f5ffd5b86016060818903601f19011215614927575f5ffd5b61492f6142ce565b61493b6020830161433a565b815260408201356001600160401b03811115614955575f5ffd5b6149648a6020838601016145cb565b6020830152506060820135915061497a82614326565b60408101919091528352602092830192016148f5565b5f5f604083850312156149a1575f5ffd5b82356149ac81614326565b915060208301356001600160401b038111156149c6575f5ffd5b6149d2858286016148b2565b9150509250929050565b5f5f604083850312156149ed575f5ffd5b82356149f881614326565b9150602083013561488f81614326565b5f8151808452602084019350602083015f5b828110156144fd57614a5386835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101614a1a565b604081525f614a7b60408301856144c2565b828103602084015261396a8185614a08565b602080825282518282018190525f918401906040840190835b81811015614acd5783516001600160a01b0316835260209384019390920191600101614aa6565b509095945050505050565b5f5f5f60408486031215614aea575f5ffd5b83356001600160401b03811115614aff575f5ffd5b614b0b86828701614519565b909450925050602084013561440081614326565b602080825282518282018190525f918401906040840190835b81811015614acd5783516001600160401b0316835260209384019390920191600101614b38565b5f5f5f5f60608587031215614b72575f5ffd5b8435614b7d81614326565b9350614b8b6020860161433a565b925060408501356001600160401b03811115614ba5575f5ffd5b614bb187828801614519565b95989497509550505050565b5f5f60408385031215614bce575f5ffd5b8235614bd981614326565b91506144696020840161433a565b5f60208284031215614bf7575f5ffd5b813560ff81168114610917575f5ffd5b5f5f60608385031215614c18575f5ffd5b614c22848461434d565b9150604083013561488f81614326565b5f60608284031215614c42575f5ffd5b50919050565b5f60208284031215614c58575f5ffd5b81356001600160401b03811115614c6d575f5ffd5b6109d484828501614c32565b5f5f5f60808486031215614c8b575f5ffd5b83356001600160401b03811115614ca0575f5ffd5b614cac868287016145cb565b9350506143f0856020860161434d565b602081525f6109176020830184614a08565b5f5f5f5f60608587031215614ce1575f5ffd5b8435614cec81614326565b935060208501356001600160401b03811115614d06575f5ffd5b614d1287828801614519565b90945092506147bd90506040860161433a565b5f5f60408385031215614d36575f5ffd5b8235614d4181614326565b915060208301356001600160401b03811115614d5b575f5ffd5b8301601f81018513614d6b575f5ffd5b8035614d796145e8826145a9565b8082825260208201915060208360051b850101925087831115614d9a575f5ffd5b602084015b83811015614ebf5780356001600160401b03811115614dbc575f5ffd5b85016080818b03601f19011215614dd1575f5ffd5b614dd96142ce565b614de68b6020840161434d565b815260608201356001600160401b03811115614e00575f5ffd5b614e0f8c6020838601016145cb565b60208301525060808201356001600160401b03811115614e2d575f5ffd5b6020818401019250508a601f830112614e44575f5ffd5b8135614e526145e8826145a9565b8082825260208201915060208360051b86010192508d831115614e73575f5ffd5b6020850194505b82851015614ea95784356001600160401b0381168114614e98575f5ffd5b825260209485019490910190614e7a565b6040840152505084525060209283019201614d9f565b50809450505050509250929050565b5f60208284031215614ede575f5ffd5b81356001600160401b03811115614ef3575f5ffd5b8201601f81018413614f03575f5ffd5b8035614f116145e8826145a9565b8082825260208201915060208360061b850101925086831115614f32575f5ffd5b6020840193505b8284101561407057614f4b878561434d565b8252602082019150604084019350614f39565b5f5f5f60408486031215614f70575f5ffd5b8335614f7b81614326565b925060208401356001600160401b03811115614f95575f5ffd5b8401601f81018613614fa5575f5ffd5b80356001600160401b03811115614fba575f5ffd5b866020828401011115614fcb575f5ffd5b939660209190910195509293505050565b5f5f60408385031215614fed575f5ffd5b8235614ff881614326565b915060208301356001600160401b03811115615012575f5ffd5b6149d285828601614c32565b5f5f5f5f60608587031215615031575f5ffd5b843561503c81614326565b935060208501356001600160401b03811115615056575f5ffd5b615062878288016148b2565b93505060408501356001600160401b03811115614ba5575f5ffd5b5f6020828403121561508d575f5ffd5b6109178261433a565b5f5f8335601e198436030181126150ab575f5ffd5b8301803591506001600160401b038211156150c4575f5ffd5b6020019150600581901b3603821315610d43575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156150ff575f5ffd5b813561ffff81168114610917575f5ffd5b5f60208284031215615120575f5ffd5b81518015158114610917575f5ffd5b604081016109d882846144a4565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff81811683821601908111156109d8576109d861513d565b8183526020830192505f815f5b848110156144fd5763ffffffff6151908361433a565b168652602095860195919091019060010161517a565b6001600160a01b038581168252841660208201526060604082018190525f90614070908301848661516d565b6001600160a01b038616815260c081016151ef60208301876144a4565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b5f60208284031215615233575f5ffd5b81516001600160401b03811115615248575f5ffd5b8201601f81018413615258575f5ffd5b80516152666145e8826145a9565b8082825260208201915060208360051b850101925086831115615287575f5ffd5b6020840193505b828410156140705783516152a181614326565b82526020938401939091019061528e565b606081016152c082856144a4565b6001600160a01b039290921660409190910152919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610ae76020830184866152d8565b5f5f8335601e19843603018112615328575f5ffd5b8301803591506001600160401b03821115615341575f5ffd5b602001915036819003821315610d43575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f90615381908301868861516d565b82810360608401526153948185876152d8565b9998505050505050505050565b80516020808301519190811015614c42575f1960209190910360031b1b16919050565b5f8235603e198336030181126153d8575f5ffd5b9190910192915050565b5f600182016153f3576153f361513d565b5060010190565b818103818111156109d8576109d861513d565b6001600160401b0382811682821603908111156109d8576109d861513d565b5f81600f0b60016001607f1b031981036154485761544861513d565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b0319821217156109d8576109d861513d565b6001600160a01b038716815260e0810161549a60208301886144a4565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f602082840312156154e0575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615505602084018a6144a4565b60c060608401528690528660e083015f5b8881101561554657823561552981614326565b6001600160a01b0316825260209283019290910190600101615516565b50838103608085015261555981886146b1565b91505082810360a084015261556f8185876152d8565b9a9950505050505050505050565b5f8161558b5761558b61513d565b505f190190565b608081016155a082866144a4565b6001600160a01b0393909316604082015263ffffffff91909116606090910152919050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b03821317156109d8576109d861513d565b5f60208284031215615602575f5ffd5b815161091781614326565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b808201808211156109d8576109d861513d56fea2646970667358221220eff7eea11020b0cb952b2e22f02345853ee62d6c23b2ee41b88b86fc347efc4364736f6c634300081e0033", } // AllocationManagerABI is the input ABI used to generate the binding from. @@ -93,7 +100,7 @@ var AllocationManagerABI = AllocationManagerMetaData.ABI var AllocationManagerBin = AllocationManagerMetaData.Bin // DeployAllocationManager deploys a new Ethereum contract, binding an instance of AllocationManager to it. -func DeployAllocationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenStrategy common.Address, _pauserRegistry common.Address, _permissionController common.Address, _DEALLOCATION_DELAY uint32, _ALLOCATION_CONFIGURATION_DELAY uint32, _version string) (common.Address, *types.Transaction, *AllocationManager, error) { +func DeployAllocationManager(auth *bind.TransactOpts, backend bind.ContractBackend, _allocationManagerView common.Address, _delegation common.Address, _eigenStrategy common.Address, _pauserRegistry common.Address, _permissionController common.Address, _DEALLOCATION_DELAY uint32, _ALLOCATION_CONFIGURATION_DELAY uint32) (common.Address, *types.Transaction, *AllocationManager, error) { parsed, err := AllocationManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -102,7 +109,7 @@ func DeployAllocationManager(auth *bind.TransactOpts, backend bind.ContractBacke return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AllocationManagerBin), backend, _delegation, _eigenStrategy, _pauserRegistry, _permissionController, _DEALLOCATION_DELAY, _ALLOCATION_CONFIGURATION_DELAY, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AllocationManagerBin), backend, _allocationManagerView, _delegation, _eigenStrategy, _pauserRegistry, _permissionController, _DEALLOCATION_DELAY, _ALLOCATION_CONFIGURATION_DELAY) if err != nil { return common.Address{}, nil, nil, err } @@ -408,10 +415,10 @@ func (_AllocationManager *AllocationManagerCallerSession) GetAVSRegistrar(avs co // GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { +// Solidity: function getAllocatableMagnitude(address , address ) view returns(uint64 allocatableMagnitude) +func (_AllocationManager *AllocationManagerCaller) GetAllocatableMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getAllocatableMagnitude", arg0, arg1) if err != nil { return *new(uint64), err @@ -425,24 +432,24 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocatableMagnitude(opts // GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetAllocatableMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getAllocatableMagnitude(address , address ) view returns(uint64 allocatableMagnitude) +func (_AllocationManager *AllocationManagerSession) GetAllocatableMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetAllocatableMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. // -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetAllocatableMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getAllocatableMagnitude(address , address ) view returns(uint64 allocatableMagnitude) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocatableMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetAllocatableMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. // -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerCaller) GetAllocatedSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { +// Solidity: function getAllocatedSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerCaller) GetAllocatedSets(opts *bind.CallOpts, arg0 common.Address) ([]OperatorSet, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocatedSets", operator) + err := _AllocationManager.contract.Call(opts, &out, "getAllocatedSets", arg0) if err != nil { return *new([]OperatorSet), err @@ -456,24 +463,24 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocatedSets(opts *bind.C // GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. // -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManager.Contract.GetAllocatedSets(&_AllocationManager.CallOpts, operator) +// Solidity: function getAllocatedSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerSession) GetAllocatedSets(arg0 common.Address) ([]OperatorSet, error) { + return _AllocationManager.Contract.GetAllocatedSets(&_AllocationManager.CallOpts, arg0) } // GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. // -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManager.Contract.GetAllocatedSets(&_AllocationManager.CallOpts, operator) +// Solidity: function getAllocatedSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedSets(arg0 common.Address) ([]OperatorSet, error) { + return _AllocationManager.Contract.GetAllocatedSets(&_AllocationManager.CallOpts, arg0) } // GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. // -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) -func (_AllocationManager *AllocationManagerCaller) GetAllocatedStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { +// Solidity: function getAllocatedStake((address,uint32) , address[] , address[] ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerCaller) GetAllocatedStake(opts *bind.CallOpts, arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address) ([][]*big.Int, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocatedStake", operatorSet, operators, strategies) + err := _AllocationManager.contract.Call(opts, &out, "getAllocatedStake", arg0, arg1, arg2) if err != nil { return *new([][]*big.Int), err @@ -487,24 +494,24 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocatedStake(opts *bind. // GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. // -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) -func (_AllocationManager *AllocationManagerSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { - return _AllocationManager.Contract.GetAllocatedStake(&_AllocationManager.CallOpts, operatorSet, operators, strategies) +// Solidity: function getAllocatedStake((address,uint32) , address[] , address[] ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerSession) GetAllocatedStake(arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address) ([][]*big.Int, error) { + return _AllocationManager.Contract.GetAllocatedStake(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. // -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { - return _AllocationManager.Contract.GetAllocatedStake(&_AllocationManager.CallOpts, operatorSet, operators, strategies) +// Solidity: function getAllocatedStake((address,uint32) , address[] , address[] ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedStake(arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address) ([][]*big.Int, error) { + return _AllocationManager.Contract.GetAllocatedStake(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. // -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCaller) GetAllocatedStrategies(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { +// Solidity: function getAllocatedStrategies(address , (address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerCaller) GetAllocatedStrategies(opts *bind.CallOpts, arg0 common.Address, arg1 OperatorSet) ([]common.Address, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocatedStrategies", operator, operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "getAllocatedStrategies", arg0, arg1) if err != nil { return *new([]common.Address), err @@ -518,24 +525,24 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocatedStrategies(opts * // GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. // -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetAllocatedStrategies(&_AllocationManager.CallOpts, operator, operatorSet) +// Solidity: function getAllocatedStrategies(address , (address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerSession) GetAllocatedStrategies(arg0 common.Address, arg1 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetAllocatedStrategies(&_AllocationManager.CallOpts, arg0, arg1) } // GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. // -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetAllocatedStrategies(&_AllocationManager.CallOpts, operator, operatorSet) +// Solidity: function getAllocatedStrategies(address , (address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocatedStrategies(arg0 common.Address, arg1 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetAllocatedStrategies(&_AllocationManager.CallOpts, arg0, arg1) } // GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. // -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManager *AllocationManagerCaller) GetAllocation(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { +// Solidity: function getAllocation(address , (address,uint32) , address ) view returns((uint64,int128,uint32) allocation) +func (_AllocationManager *AllocationManagerCaller) GetAllocation(opts *bind.CallOpts, arg0 common.Address, arg1 OperatorSet, arg2 common.Address) (IAllocationManagerTypesAllocation, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocation", operator, operatorSet, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getAllocation", arg0, arg1, arg2) if err != nil { return *new(IAllocationManagerTypesAllocation), err @@ -549,16 +556,16 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocation(opts *bind.Call // GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. // -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManager *AllocationManagerSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetAllocation(&_AllocationManager.CallOpts, operator, operatorSet, strategy) +// Solidity: function getAllocation(address , (address,uint32) , address ) view returns((uint64,int128,uint32) allocation) +func (_AllocationManager *AllocationManagerSession) GetAllocation(arg0 common.Address, arg1 OperatorSet, arg2 common.Address) (IAllocationManagerTypesAllocation, error) { + return _AllocationManager.Contract.GetAllocation(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. // -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetAllocation(&_AllocationManager.CallOpts, operator, operatorSet, strategy) +// Solidity: function getAllocation(address , (address,uint32) , address ) view returns((uint64,int128,uint32) allocation) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocation(arg0 common.Address, arg1 OperatorSet, arg2 common.Address) (IAllocationManagerTypesAllocation, error) { + return _AllocationManager.Contract.GetAllocation(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. @@ -595,10 +602,10 @@ func (_AllocationManager *AllocationManagerCallerSession) GetAllocationDelay(ope // GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. // -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerCaller) GetAllocations(opts *bind.CallOpts, operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { +// Solidity: function getAllocations(address[] , (address,uint32) , address ) view returns((uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerCaller) GetAllocations(opts *bind.CallOpts, arg0 []common.Address, arg1 OperatorSet, arg2 common.Address) ([]IAllocationManagerTypesAllocation, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getAllocations", operators, operatorSet, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getAllocations", arg0, arg1, arg2) if err != nil { return *new([]IAllocationManagerTypesAllocation), err @@ -612,24 +619,24 @@ func (_AllocationManager *AllocationManagerCaller) GetAllocations(opts *bind.Cal // GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. // -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetAllocations(&_AllocationManager.CallOpts, operators, operatorSet, strategy) +// Solidity: function getAllocations(address[] , (address,uint32) , address ) view returns((uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerSession) GetAllocations(arg0 []common.Address, arg1 OperatorSet, arg2 common.Address) ([]IAllocationManagerTypesAllocation, error) { + return _AllocationManager.Contract.GetAllocations(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. // -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerCallerSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetAllocations(&_AllocationManager.CallOpts, operators, operatorSet, strategy) +// Solidity: function getAllocations(address[] , (address,uint32) , address ) view returns((uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerCallerSession) GetAllocations(arg0 []common.Address, arg1 OperatorSet, arg2 common.Address) ([]IAllocationManagerTypesAllocation, error) { + return _AllocationManager.Contract.GetAllocations(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. // -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCaller) GetEncumberedMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { +// Solidity: function getEncumberedMagnitude(address , address ) view returns(uint64 encumberedMagnitude) +func (_AllocationManager *AllocationManagerCaller) GetEncumberedMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getEncumberedMagnitude", operator, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getEncumberedMagnitude", arg0, arg1) if err != nil { return *new(uint64), err @@ -643,24 +650,24 @@ func (_AllocationManager *AllocationManagerCaller) GetEncumberedMagnitude(opts * // GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. // -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetEncumberedMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getEncumberedMagnitude(address , address ) view returns(uint64 encumberedMagnitude) +func (_AllocationManager *AllocationManagerSession) GetEncumberedMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetEncumberedMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. // -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCallerSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetEncumberedMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getEncumberedMagnitude(address , address ) view returns(uint64 encumberedMagnitude) +func (_AllocationManager *AllocationManagerCallerSession) GetEncumberedMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetEncumberedMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. // -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { +// Solidity: function getMaxMagnitude(address , address ) view returns(uint64 maxMagnitude) +func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitude(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitude", operator, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitude", arg0, arg1) if err != nil { return *new(uint64), err @@ -674,24 +681,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitude(opts *bind.Ca // GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. // -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getMaxMagnitude(address , address ) view returns(uint64 maxMagnitude) +func (_AllocationManager *AllocationManagerSession) GetMaxMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. // -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitude(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getMaxMagnitude(address , address ) view returns(uint64 maxMagnitude) +func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitude(arg0 common.Address, arg1 common.Address) (uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitude(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. // -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes(opts *bind.CallOpts, operators []common.Address, strategy common.Address) ([]uint64, error) { +// Solidity: function getMaxMagnitudes(address[] , address ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes(opts *bind.CallOpts, arg0 []common.Address, arg1 common.Address) ([]uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudes", operators, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudes", arg0, arg1) if err != nil { return *new([]uint64), err @@ -705,24 +712,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes(opts *bind.C // GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. // -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudes(&_AllocationManager.CallOpts, operators, strategy) +// Solidity: function getMaxMagnitudes(address[] , address ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudes(arg0 []common.Address, arg1 common.Address) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudes(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. // -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudes(&_AllocationManager.CallOpts, operators, strategy) +// Solidity: function getMaxMagnitudes(address[] , address ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudes(arg0 []common.Address, arg1 common.Address) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudes(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. // -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes0(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { +// Solidity: function getMaxMagnitudes(address , address[] ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes0(opts *bind.CallOpts, arg0 common.Address, arg1 []common.Address) ([]uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudes0", operator, strategies) + err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudes0", arg0, arg1) if err != nil { return *new([]uint64), err @@ -736,24 +743,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudes0(opts *bind. // GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. // -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudes0(&_AllocationManager.CallOpts, operator, strategies) +// Solidity: function getMaxMagnitudes(address , address[] ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudes0(arg0 common.Address, arg1 []common.Address) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudes0(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. // -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudes0(&_AllocationManager.CallOpts, operator, strategies) +// Solidity: function getMaxMagnitudes(address , address[] ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudes0(arg0 common.Address, arg1 []common.Address) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudes0(&_AllocationManager.CallOpts, arg0, arg1) } // GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. // -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudesAtBlock(opts *bind.CallOpts, operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { +// Solidity: function getMaxMagnitudesAtBlock(address , address[] , uint32 ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudesAtBlock(opts *bind.CallOpts, arg0 common.Address, arg1 []common.Address, arg2 uint32) ([]uint64, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudesAtBlock", operator, strategies, blockNumber) + err := _AllocationManager.contract.Call(opts, &out, "getMaxMagnitudesAtBlock", arg0, arg1, arg2) if err != nil { return *new([]uint64), err @@ -767,24 +774,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMaxMagnitudesAtBlock(opts // GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. // -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudesAtBlock(&_AllocationManager.CallOpts, operator, strategies, blockNumber) +// Solidity: function getMaxMagnitudesAtBlock(address , address[] , uint32 ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerSession) GetMaxMagnitudesAtBlock(arg0 common.Address, arg1 []common.Address, arg2 uint32) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudesAtBlock(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. // -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { - return _AllocationManager.Contract.GetMaxMagnitudesAtBlock(&_AllocationManager.CallOpts, operator, strategies, blockNumber) +// Solidity: function getMaxMagnitudesAtBlock(address , address[] , uint32 ) view returns(uint64[] maxMagnitudes) +func (_AllocationManager *AllocationManagerCallerSession) GetMaxMagnitudesAtBlock(arg0 common.Address, arg1 []common.Address, arg2 uint32) ([]uint64, error) { + return _AllocationManager.Contract.GetMaxMagnitudesAtBlock(&_AllocationManager.CallOpts, arg0, arg1, arg2) } // GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. // -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerCaller) GetMemberCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { +// Solidity: function getMemberCount((address,uint32) ) view returns(uint256 memberCount) +func (_AllocationManager *AllocationManagerCaller) GetMemberCount(opts *bind.CallOpts, arg0 OperatorSet) (*big.Int, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMemberCount", operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "getMemberCount", arg0) if err != nil { return *new(*big.Int), err @@ -798,24 +805,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMemberCount(opts *bind.Cal // GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. // -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManager.Contract.GetMemberCount(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getMemberCount((address,uint32) ) view returns(uint256 memberCount) +func (_AllocationManager *AllocationManagerSession) GetMemberCount(arg0 OperatorSet) (*big.Int, error) { + return _AllocationManager.Contract.GetMemberCount(&_AllocationManager.CallOpts, arg0) } // GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. // -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerCallerSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManager.Contract.GetMemberCount(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getMemberCount((address,uint32) ) view returns(uint256 memberCount) +func (_AllocationManager *AllocationManagerCallerSession) GetMemberCount(arg0 OperatorSet) (*big.Int, error) { + return _AllocationManager.Contract.GetMemberCount(&_AllocationManager.CallOpts, arg0) } // GetMembers is a free data retrieval call binding the contract method 0x6e875dba. // -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCaller) GetMembers(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { +// Solidity: function getMembers((address,uint32) ) view returns(address[] operators) +func (_AllocationManager *AllocationManagerCaller) GetMembers(opts *bind.CallOpts, arg0 OperatorSet) ([]common.Address, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMembers", operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "getMembers", arg0) if err != nil { return *new([]common.Address), err @@ -829,24 +836,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMembers(opts *bind.CallOpt // GetMembers is a free data retrieval call binding the contract method 0x6e875dba. // -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetMembers(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getMembers((address,uint32) ) view returns(address[] operators) +func (_AllocationManager *AllocationManagerSession) GetMembers(arg0 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetMembers(&_AllocationManager.CallOpts, arg0) } // GetMembers is a free data retrieval call binding the contract method 0x6e875dba. // -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCallerSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetMembers(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getMembers((address,uint32) ) view returns(address[] operators) +func (_AllocationManager *AllocationManagerCallerSession) GetMembers(arg0 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetMembers(&_AllocationManager.CallOpts, arg0) } // GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. // -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManager *AllocationManagerCaller) GetMinimumSlashableStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { +// Solidity: function getMinimumSlashableStake((address,uint32) , address[] , address[] , uint32 ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerCaller) GetMinimumSlashableStake(opts *bind.CallOpts, arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address, arg3 uint32) ([][]*big.Int, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getMinimumSlashableStake", operatorSet, operators, strategies, futureBlock) + err := _AllocationManager.contract.Call(opts, &out, "getMinimumSlashableStake", arg0, arg1, arg2, arg3) if err != nil { return *new([][]*big.Int), err @@ -860,24 +867,24 @@ func (_AllocationManager *AllocationManagerCaller) GetMinimumSlashableStake(opts // GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. // -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManager *AllocationManagerSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { - return _AllocationManager.Contract.GetMinimumSlashableStake(&_AllocationManager.CallOpts, operatorSet, operators, strategies, futureBlock) +// Solidity: function getMinimumSlashableStake((address,uint32) , address[] , address[] , uint32 ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerSession) GetMinimumSlashableStake(arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address, arg3 uint32) ([][]*big.Int, error) { + return _AllocationManager.Contract.GetMinimumSlashableStake(&_AllocationManager.CallOpts, arg0, arg1, arg2, arg3) } // GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. // -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManager *AllocationManagerCallerSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { - return _AllocationManager.Contract.GetMinimumSlashableStake(&_AllocationManager.CallOpts, operatorSet, operators, strategies, futureBlock) +// Solidity: function getMinimumSlashableStake((address,uint32) , address[] , address[] , uint32 ) view returns(uint256[][] slashableStake) +func (_AllocationManager *AllocationManagerCallerSession) GetMinimumSlashableStake(arg0 OperatorSet, arg1 []common.Address, arg2 []common.Address, arg3 uint32) ([][]*big.Int, error) { + return _AllocationManager.Contract.GetMinimumSlashableStake(&_AllocationManager.CallOpts, arg0, arg1, arg2, arg3) } // GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. // -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManager *AllocationManagerCaller) GetOperatorSetCount(opts *bind.CallOpts, avs common.Address) (*big.Int, error) { +// Solidity: function getOperatorSetCount(address ) view returns(uint256 count) +func (_AllocationManager *AllocationManagerCaller) GetOperatorSetCount(opts *bind.CallOpts, arg0 common.Address) (*big.Int, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getOperatorSetCount", avs) + err := _AllocationManager.contract.Call(opts, &out, "getOperatorSetCount", arg0) if err != nil { return *new(*big.Int), err @@ -891,16 +898,61 @@ func (_AllocationManager *AllocationManagerCaller) GetOperatorSetCount(opts *bin // GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. // -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManager *AllocationManagerSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { - return _AllocationManager.Contract.GetOperatorSetCount(&_AllocationManager.CallOpts, avs) +// Solidity: function getOperatorSetCount(address ) view returns(uint256 count) +func (_AllocationManager *AllocationManagerSession) GetOperatorSetCount(arg0 common.Address) (*big.Int, error) { + return _AllocationManager.Contract.GetOperatorSetCount(&_AllocationManager.CallOpts, arg0) } // GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. // -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManager *AllocationManagerCallerSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { - return _AllocationManager.Contract.GetOperatorSetCount(&_AllocationManager.CallOpts, avs) +// Solidity: function getOperatorSetCount(address ) view returns(uint256 count) +func (_AllocationManager *AllocationManagerCallerSession) GetOperatorSetCount(arg0 common.Address) (*big.Int, error) { + return _AllocationManager.Contract.GetOperatorSetCount(&_AllocationManager.CallOpts, arg0) +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) ) view returns(address pendingSlasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerCaller) GetPendingSlasher(opts *bind.CallOpts, arg0 OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + var out []interface{} + err := _AllocationManager.contract.Call(opts, &out, "getPendingSlasher", arg0) + + outstruct := new(struct { + PendingSlasher common.Address + EffectBlock uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.PendingSlasher = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.EffectBlock = *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) ) view returns(address pendingSlasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerSession) GetPendingSlasher(arg0 OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + return _AllocationManager.Contract.GetPendingSlasher(&_AllocationManager.CallOpts, arg0) +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) ) view returns(address pendingSlasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerCallerSession) GetPendingSlasher(arg0 OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + return _AllocationManager.Contract.GetPendingSlasher(&_AllocationManager.CallOpts, arg0) } // GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. @@ -936,10 +988,10 @@ func (_AllocationManager *AllocationManagerCallerSession) GetRedistributionRecip // GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. // -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerCaller) GetRegisteredSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { +// Solidity: function getRegisteredSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerCaller) GetRegisteredSets(opts *bind.CallOpts, arg0 common.Address) ([]OperatorSet, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getRegisteredSets", operator) + err := _AllocationManager.contract.Call(opts, &out, "getRegisteredSets", arg0) if err != nil { return *new([]OperatorSet), err @@ -953,24 +1005,24 @@ func (_AllocationManager *AllocationManagerCaller) GetRegisteredSets(opts *bind. // GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. // -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManager.Contract.GetRegisteredSets(&_AllocationManager.CallOpts, operator) +// Solidity: function getRegisteredSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerSession) GetRegisteredSets(arg0 common.Address) ([]OperatorSet, error) { + return _AllocationManager.Contract.GetRegisteredSets(&_AllocationManager.CallOpts, arg0) } // GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. // -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) -func (_AllocationManager *AllocationManagerCallerSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManager.Contract.GetRegisteredSets(&_AllocationManager.CallOpts, operator) +// Solidity: function getRegisteredSets(address ) view returns((address,uint32)[] operatorSets) +func (_AllocationManager *AllocationManagerCallerSession) GetRegisteredSets(arg0 common.Address) ([]OperatorSet, error) { + return _AllocationManager.Contract.GetRegisteredSets(&_AllocationManager.CallOpts, arg0) } // GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. // -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerCaller) GetSlashCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { +// Solidity: function getSlashCount((address,uint32) ) view returns(uint256 slashCount) +func (_AllocationManager *AllocationManagerCaller) GetSlashCount(opts *bind.CallOpts, arg0 OperatorSet) (*big.Int, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getSlashCount", operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "getSlashCount", arg0) if err != nil { return *new(*big.Int), err @@ -984,24 +1036,55 @@ func (_AllocationManager *AllocationManagerCaller) GetSlashCount(opts *bind.Call // GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. // -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManager.Contract.GetSlashCount(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getSlashCount((address,uint32) ) view returns(uint256 slashCount) +func (_AllocationManager *AllocationManagerSession) GetSlashCount(arg0 OperatorSet) (*big.Int, error) { + return _AllocationManager.Contract.GetSlashCount(&_AllocationManager.CallOpts, arg0) } // GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. // -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManager *AllocationManagerCallerSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManager.Contract.GetSlashCount(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getSlashCount((address,uint32) ) view returns(uint256 slashCount) +func (_AllocationManager *AllocationManagerCallerSession) GetSlashCount(arg0 OperatorSet) (*big.Int, error) { + return _AllocationManager.Contract.GetSlashCount(&_AllocationManager.CallOpts, arg0) +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManager *AllocationManagerCaller) GetSlasher(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, error) { + var out []interface{} + err := _AllocationManager.contract.Call(opts, &out, "getSlasher", operatorSet) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManager *AllocationManagerSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManager.Contract.GetSlasher(&_AllocationManager.CallOpts, operatorSet) +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManager *AllocationManagerCallerSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManager.Contract.GetSlasher(&_AllocationManager.CallOpts, operatorSet) } // GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. // -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCaller) GetStrategiesInOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { +// Solidity: function getStrategiesInOperatorSet((address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerCaller) GetStrategiesInOperatorSet(opts *bind.CallOpts, arg0 OperatorSet) ([]common.Address, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getStrategiesInOperatorSet", operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "getStrategiesInOperatorSet", arg0) if err != nil { return *new([]common.Address), err @@ -1015,56 +1098,69 @@ func (_AllocationManager *AllocationManagerCaller) GetStrategiesInOperatorSet(op // GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. // -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetStrategiesInOperatorSet(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getStrategiesInOperatorSet((address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerSession) GetStrategiesInOperatorSet(arg0 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetStrategiesInOperatorSet(&_AllocationManager.CallOpts, arg0) } // GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. // -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) -func (_AllocationManager *AllocationManagerCallerSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManager.Contract.GetStrategiesInOperatorSet(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function getStrategiesInOperatorSet((address,uint32) ) view returns(address[] strategies) +func (_AllocationManager *AllocationManagerCallerSession) GetStrategiesInOperatorSet(arg0 OperatorSet) ([]common.Address, error) { + return _AllocationManager.Contract.GetStrategiesInOperatorSet(&_AllocationManager.CallOpts, arg0) } // GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. // -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerCaller) GetStrategyAllocations(opts *bind.CallOpts, operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { +// Solidity: function getStrategyAllocations(address , address ) view returns((address,uint32)[] operatorSets, (uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerCaller) GetStrategyAllocations(opts *bind.CallOpts, arg0 common.Address, arg1 common.Address) (struct { + OperatorSets []OperatorSet + Allocations []IAllocationManagerTypesAllocation +}, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "getStrategyAllocations", operator, strategy) + err := _AllocationManager.contract.Call(opts, &out, "getStrategyAllocations", arg0, arg1) + outstruct := new(struct { + OperatorSets []OperatorSet + Allocations []IAllocationManagerTypesAllocation + }) if err != nil { - return *new([]OperatorSet), *new([]IAllocationManagerTypesAllocation), err + return *outstruct, err } - out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) - out1 := *abi.ConvertType(out[1], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) + outstruct.OperatorSets = *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) + outstruct.Allocations = *abi.ConvertType(out[1], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) - return out0, out1, err + return *outstruct, err } // GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. // -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetStrategyAllocations(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getStrategyAllocations(address , address ) view returns((address,uint32)[] operatorSets, (uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerSession) GetStrategyAllocations(arg0 common.Address, arg1 common.Address) (struct { + OperatorSets []OperatorSet + Allocations []IAllocationManagerTypesAllocation +}, error) { + return _AllocationManager.Contract.GetStrategyAllocations(&_AllocationManager.CallOpts, arg0, arg1) } // GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. // -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManager *AllocationManagerCallerSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { - return _AllocationManager.Contract.GetStrategyAllocations(&_AllocationManager.CallOpts, operator, strategy) +// Solidity: function getStrategyAllocations(address , address ) view returns((address,uint32)[] operatorSets, (uint64,int128,uint32)[] allocations) +func (_AllocationManager *AllocationManagerCallerSession) GetStrategyAllocations(arg0 common.Address, arg1 common.Address) (struct { + OperatorSets []OperatorSet + Allocations []IAllocationManagerTypesAllocation +}, error) { + return _AllocationManager.Contract.GetStrategyAllocations(&_AllocationManager.CallOpts, arg0, arg1) } // IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. // -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerCaller) IsMemberOfOperatorSet(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) (bool, error) { +// Solidity: function isMemberOfOperatorSet(address , (address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerCaller) IsMemberOfOperatorSet(opts *bind.CallOpts, arg0 common.Address, arg1 OperatorSet) (bool, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "isMemberOfOperatorSet", operator, operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "isMemberOfOperatorSet", arg0, arg1) if err != nil { return *new(bool), err @@ -1078,24 +1174,24 @@ func (_AllocationManager *AllocationManagerCaller) IsMemberOfOperatorSet(opts *b // IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. // -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManager.Contract.IsMemberOfOperatorSet(&_AllocationManager.CallOpts, operator, operatorSet) +// Solidity: function isMemberOfOperatorSet(address , (address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerSession) IsMemberOfOperatorSet(arg0 common.Address, arg1 OperatorSet) (bool, error) { + return _AllocationManager.Contract.IsMemberOfOperatorSet(&_AllocationManager.CallOpts, arg0, arg1) } // IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. // -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerCallerSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManager.Contract.IsMemberOfOperatorSet(&_AllocationManager.CallOpts, operator, operatorSet) +// Solidity: function isMemberOfOperatorSet(address , (address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerCallerSession) IsMemberOfOperatorSet(arg0 common.Address, arg1 OperatorSet) (bool, error) { + return _AllocationManager.Contract.IsMemberOfOperatorSet(&_AllocationManager.CallOpts, arg0, arg1) } // IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. // -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManager *AllocationManagerCaller) IsOperatorRedistributable(opts *bind.CallOpts, operator common.Address) (bool, error) { +// Solidity: function isOperatorRedistributable(address ) view returns(bool result) +func (_AllocationManager *AllocationManagerCaller) IsOperatorRedistributable(opts *bind.CallOpts, arg0 common.Address) (bool, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "isOperatorRedistributable", operator) + err := _AllocationManager.contract.Call(opts, &out, "isOperatorRedistributable", arg0) if err != nil { return *new(bool), err @@ -1109,24 +1205,24 @@ func (_AllocationManager *AllocationManagerCaller) IsOperatorRedistributable(opt // IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. // -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManager *AllocationManagerSession) IsOperatorRedistributable(operator common.Address) (bool, error) { - return _AllocationManager.Contract.IsOperatorRedistributable(&_AllocationManager.CallOpts, operator) +// Solidity: function isOperatorRedistributable(address ) view returns(bool result) +func (_AllocationManager *AllocationManagerSession) IsOperatorRedistributable(arg0 common.Address) (bool, error) { + return _AllocationManager.Contract.IsOperatorRedistributable(&_AllocationManager.CallOpts, arg0) } // IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. // -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManager *AllocationManagerCallerSession) IsOperatorRedistributable(operator common.Address) (bool, error) { - return _AllocationManager.Contract.IsOperatorRedistributable(&_AllocationManager.CallOpts, operator) +// Solidity: function isOperatorRedistributable(address ) view returns(bool result) +func (_AllocationManager *AllocationManagerCallerSession) IsOperatorRedistributable(arg0 common.Address) (bool, error) { + return _AllocationManager.Contract.IsOperatorRedistributable(&_AllocationManager.CallOpts, arg0) } // IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. // -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerCaller) IsOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) (bool, error) { +// Solidity: function isOperatorSet((address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerCaller) IsOperatorSet(opts *bind.CallOpts, arg0 OperatorSet) (bool, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "isOperatorSet", operatorSet) + err := _AllocationManager.contract.Call(opts, &out, "isOperatorSet", arg0) if err != nil { return *new(bool), err @@ -1140,16 +1236,16 @@ func (_AllocationManager *AllocationManagerCaller) IsOperatorSet(opts *bind.Call // IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. // -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManager.Contract.IsOperatorSet(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function isOperatorSet((address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerSession) IsOperatorSet(arg0 OperatorSet) (bool, error) { + return _AllocationManager.Contract.IsOperatorSet(&_AllocationManager.CallOpts, arg0) } // IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. // -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManager *AllocationManagerCallerSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManager.Contract.IsOperatorSet(&_AllocationManager.CallOpts, operatorSet) +// Solidity: function isOperatorSet((address,uint32) ) view returns(bool result) +func (_AllocationManager *AllocationManagerCallerSession) IsOperatorSet(arg0 OperatorSet) (bool, error) { + return _AllocationManager.Contract.IsOperatorSet(&_AllocationManager.CallOpts, arg0) } // IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. @@ -1338,35 +1434,35 @@ func (_AllocationManager *AllocationManagerCallerSession) PermissionController() return _AllocationManager.Contract.PermissionController(&_AllocationManager.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. // -// Solidity: function version() view returns(string) -func (_AllocationManager *AllocationManagerCaller) Version(opts *bind.CallOpts) (string, error) { +// Solidity: function viewImplementation() view returns(address) +func (_AllocationManager *AllocationManagerCaller) ViewImplementation(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _AllocationManager.contract.Call(opts, &out, "version") + err := _AllocationManager.contract.Call(opts, &out, "viewImplementation") if err != nil { - return *new(string), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. // -// Solidity: function version() view returns(string) -func (_AllocationManager *AllocationManagerSession) Version() (string, error) { - return _AllocationManager.Contract.Version(&_AllocationManager.CallOpts) +// Solidity: function viewImplementation() view returns(address) +func (_AllocationManager *AllocationManagerSession) ViewImplementation() (common.Address, error) { + return _AllocationManager.Contract.ViewImplementation(&_AllocationManager.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. // -// Solidity: function version() view returns(string) -func (_AllocationManager *AllocationManagerCallerSession) Version() (string, error) { - return _AllocationManager.Contract.Version(&_AllocationManager.CallOpts) +// Solidity: function viewImplementation() view returns(address) +func (_AllocationManager *AllocationManagerCallerSession) ViewImplementation() (common.Address, error) { + return _AllocationManager.Contract.ViewImplementation(&_AllocationManager.CallOpts) } // AddStrategiesToOperatorSet is a paid mutator transaction binding the contract method 0x50feea20. @@ -1432,6 +1528,27 @@ func (_AllocationManager *AllocationManagerTransactorSession) CreateOperatorSets return _AllocationManager.Contract.CreateOperatorSets(&_AllocationManager.TransactOpts, avs, params) } +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_AllocationManager *AllocationManagerTransactor) CreateOperatorSets0(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _AllocationManager.contract.Transact(opts, "createOperatorSets0", avs, params) +} + +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_AllocationManager *AllocationManagerSession) CreateOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _AllocationManager.Contract.CreateOperatorSets0(&_AllocationManager.TransactOpts, avs, params) +} + +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_AllocationManager *AllocationManagerTransactorSession) CreateOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _AllocationManager.Contract.CreateOperatorSets0(&_AllocationManager.TransactOpts, avs, params) +} + // CreateRedistributingOperatorSets is a paid mutator transaction binding the contract method 0x32a879e4. // // Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[])[] params, address[] redistributionRecipients) returns() @@ -1453,6 +1570,27 @@ func (_AllocationManager *AllocationManagerTransactorSession) CreateRedistributi return _AllocationManager.Contract.CreateRedistributingOperatorSets(&_AllocationManager.TransactOpts, avs, params, redistributionRecipients) } +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_AllocationManager *AllocationManagerTransactor) CreateRedistributingOperatorSets0(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _AllocationManager.contract.Transact(opts, "createRedistributingOperatorSets0", avs, params, redistributionRecipients) +} + +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_AllocationManager *AllocationManagerSession) CreateRedistributingOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _AllocationManager.Contract.CreateRedistributingOperatorSets0(&_AllocationManager.TransactOpts, avs, params, redistributionRecipients) +} + +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_AllocationManager *AllocationManagerTransactorSession) CreateRedistributingOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _AllocationManager.Contract.CreateRedistributingOperatorSets0(&_AllocationManager.TransactOpts, avs, params, redistributionRecipients) +} + // DeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x6e3492b5. // // Solidity: function deregisterFromOperatorSets((address,address,uint32[]) params) returns() @@ -1495,6 +1633,27 @@ func (_AllocationManager *AllocationManagerTransactorSession) Initialize(initial return _AllocationManager.Contract.Initialize(&_AllocationManager.TransactOpts, initialPausedStatus) } +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_AllocationManager *AllocationManagerTransactor) MigrateSlashers(opts *bind.TransactOpts, operatorSets []OperatorSet) (*types.Transaction, error) { + return _AllocationManager.contract.Transact(opts, "migrateSlashers", operatorSets) +} + +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_AllocationManager *AllocationManagerSession) MigrateSlashers(operatorSets []OperatorSet) (*types.Transaction, error) { + return _AllocationManager.Contract.MigrateSlashers(&_AllocationManager.TransactOpts, operatorSets) +} + +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_AllocationManager *AllocationManagerTransactorSession) MigrateSlashers(operatorSets []OperatorSet) (*types.Transaction, error) { + return _AllocationManager.Contract.MigrateSlashers(&_AllocationManager.TransactOpts, operatorSets) +} + // ModifyAllocations is a paid mutator transaction binding the contract method 0x952899ee. // // Solidity: function modifyAllocations(address operator, ((address,uint32),address[],uint64[])[] params) returns() @@ -1705,6 +1864,27 @@ func (_AllocationManager *AllocationManagerTransactorSession) UpdateAVSMetadataU return _AllocationManager.Contract.UpdateAVSMetadataURI(&_AllocationManager.TransactOpts, avs, metadataURI) } +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_AllocationManager *AllocationManagerTransactor) UpdateSlasher(opts *bind.TransactOpts, operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _AllocationManager.contract.Transact(opts, "updateSlasher", operatorSet, slasher) +} + +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_AllocationManager *AllocationManagerSession) UpdateSlasher(operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _AllocationManager.Contract.UpdateSlasher(&_AllocationManager.TransactOpts, operatorSet, slasher) +} + +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_AllocationManager *AllocationManagerTransactorSession) UpdateSlasher(operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _AllocationManager.Contract.UpdateSlasher(&_AllocationManager.TransactOpts, operatorSet, slasher) +} + // AllocationManagerAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AllocationManager contract. type AllocationManagerAVSMetadataURIUpdatedIterator struct { Event *AllocationManagerAVSMetadataURIUpdated // Event containing the contract specifics and raw log @@ -3507,6 +3687,277 @@ func (_AllocationManager *AllocationManagerFilterer) ParseRedistributionAddressS return event, nil } +// AllocationManagerSlasherMigratedIterator is returned from FilterSlasherMigrated and is used to iterate over the raw logs and unpacked data for SlasherMigrated events raised by the AllocationManager contract. +type AllocationManagerSlasherMigratedIterator struct { + Event *AllocationManagerSlasherMigrated // 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 *AllocationManagerSlasherMigratedIterator) 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(AllocationManagerSlasherMigrated) + 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(AllocationManagerSlasherMigrated) + 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 *AllocationManagerSlasherMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerSlasherMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerSlasherMigrated represents a SlasherMigrated event raised by the AllocationManager contract. +type AllocationManagerSlasherMigrated struct { + OperatorSet OperatorSet + Slasher common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherMigrated is a free log retrieval operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManager *AllocationManagerFilterer) FilterSlasherMigrated(opts *bind.FilterOpts) (*AllocationManagerSlasherMigratedIterator, error) { + + logs, sub, err := _AllocationManager.contract.FilterLogs(opts, "SlasherMigrated") + if err != nil { + return nil, err + } + return &AllocationManagerSlasherMigratedIterator{contract: _AllocationManager.contract, event: "SlasherMigrated", logs: logs, sub: sub}, nil +} + +// WatchSlasherMigrated is a free log subscription operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManager *AllocationManagerFilterer) WatchSlasherMigrated(opts *bind.WatchOpts, sink chan<- *AllocationManagerSlasherMigrated) (event.Subscription, error) { + + logs, sub, err := _AllocationManager.contract.WatchLogs(opts, "SlasherMigrated") + 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(AllocationManagerSlasherMigrated) + if err := _AllocationManager.contract.UnpackLog(event, "SlasherMigrated", 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 +} + +// ParseSlasherMigrated is a log parse operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManager *AllocationManagerFilterer) ParseSlasherMigrated(log types.Log) (*AllocationManagerSlasherMigrated, error) { + event := new(AllocationManagerSlasherMigrated) + if err := _AllocationManager.contract.UnpackLog(event, "SlasherMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerSlasherUpdatedIterator is returned from FilterSlasherUpdated and is used to iterate over the raw logs and unpacked data for SlasherUpdated events raised by the AllocationManager contract. +type AllocationManagerSlasherUpdatedIterator struct { + Event *AllocationManagerSlasherUpdated // 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 *AllocationManagerSlasherUpdatedIterator) 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(AllocationManagerSlasherUpdated) + 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(AllocationManagerSlasherUpdated) + 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 *AllocationManagerSlasherUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerSlasherUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerSlasherUpdated represents a SlasherUpdated event raised by the AllocationManager contract. +type AllocationManagerSlasherUpdated struct { + OperatorSet OperatorSet + Slasher common.Address + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherUpdated is a free log retrieval operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerFilterer) FilterSlasherUpdated(opts *bind.FilterOpts) (*AllocationManagerSlasherUpdatedIterator, error) { + + logs, sub, err := _AllocationManager.contract.FilterLogs(opts, "SlasherUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerSlasherUpdatedIterator{contract: _AllocationManager.contract, event: "SlasherUpdated", logs: logs, sub: sub}, nil +} + +// WatchSlasherUpdated is a free log subscription operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerFilterer) WatchSlasherUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerSlasherUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManager.contract.WatchLogs(opts, "SlasherUpdated") + 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(AllocationManagerSlasherUpdated) + if err := _AllocationManager.contract.UnpackLog(event, "SlasherUpdated", 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 +} + +// ParseSlasherUpdated is a log parse operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManager *AllocationManagerFilterer) ParseSlasherUpdated(log types.Log) (*AllocationManagerSlasherUpdated, error) { + event := new(AllocationManagerSlasherUpdated) + if err := _AllocationManager.contract.UnpackLog(event, "SlasherUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // AllocationManagerStrategyAddedToOperatorSetIterator is returned from FilterStrategyAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyAddedToOperatorSet events raised by the AllocationManager contract. type AllocationManagerStrategyAddedToOperatorSetIterator struct { Event *AllocationManagerStrategyAddedToOperatorSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/AllocationManagerStorage/binding.go b/pkg/bindings/AllocationManagerStorage/binding.go index 8d0cd4d447..a88a01f080 100644 --- a/pkg/bindings/AllocationManagerStorage/binding.go +++ b/pkg/bindings/AllocationManagerStorage/binding.go @@ -29,49 +29,6 @@ var ( _ = abi.ConvertType ) -// IAllocationManagerTypesAllocateParams is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesAllocateParams struct { - OperatorSet OperatorSet - Strategies []common.Address - NewMagnitudes []uint64 -} - -// IAllocationManagerTypesAllocation is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesAllocation struct { - CurrentMagnitude uint64 - PendingDiff *big.Int - EffectBlock uint32 -} - -// IAllocationManagerTypesCreateSetParams is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesCreateSetParams struct { - OperatorSetId uint32 - Strategies []common.Address -} - -// IAllocationManagerTypesDeregisterParams is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesDeregisterParams struct { - Operator common.Address - Avs common.Address - OperatorSetIds []uint32 -} - -// IAllocationManagerTypesRegisterParams is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesRegisterParams struct { - Avs common.Address - OperatorSetIds []uint32 - Data []byte -} - -// IAllocationManagerTypesSlashingParams is an auto generated low-level Go binding around an user-defined struct. -type IAllocationManagerTypesSlashingParams struct { - Operator common.Address - OperatorSetId uint32 - Strategies []common.Address - WadsToSlash []*big.Int - Description string -} - // OperatorSet is an auto generated low-level Go binding around an user-defined struct. type OperatorSet struct { Avs common.Address @@ -80,7 +37,7 @@ type OperatorSet struct { // AllocationManagerStorageMetaData contains all meta data concerning the AllocationManagerStorage contract. var AllocationManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategiesToOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearDeallocationQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToClear\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterFromOperatorSets\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.DeregisterParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"futureBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.AllocateParams[]\",\"components\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"newMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerForOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.RegisterParams\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.SlashingParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadsToSlash\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherMigrated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false}]", } // AllocationManagerStorageABI is the input ABI used to generate the binding from. @@ -302,1211 +259,55 @@ func (_AllocationManagerStorage *AllocationManagerStorageCaller) Delegation(opts return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. -// -// Solidity: function delegation() view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageSession) Delegation() (common.Address, error) { - return _AllocationManagerStorage.Contract.Delegation(&_AllocationManagerStorage.CallOpts) -} - -// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. -// -// Solidity: function delegation() view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) Delegation() (common.Address, error) { - return _AllocationManagerStorage.Contract.Delegation(&_AllocationManagerStorage.CallOpts) -} - -// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. -// -// Solidity: function eigenStrategy() view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) EigenStrategy(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "eigenStrategy") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. -// -// Solidity: function eigenStrategy() view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageSession) EigenStrategy() (common.Address, error) { - return _AllocationManagerStorage.Contract.EigenStrategy(&_AllocationManagerStorage.CallOpts) -} - -// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. -// -// Solidity: function eigenStrategy() view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) EigenStrategy() (common.Address, error) { - return _AllocationManagerStorage.Contract.EigenStrategy(&_AllocationManagerStorage.CallOpts) -} - -// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. -// -// Solidity: function getAVSRegistrar(address avs) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAVSRegistrar(opts *bind.CallOpts, avs common.Address) (common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAVSRegistrar", avs) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. -// -// Solidity: function getAVSRegistrar(address avs) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAVSRegistrar(avs common.Address) (common.Address, error) { - return _AllocationManagerStorage.Contract.GetAVSRegistrar(&_AllocationManagerStorage.CallOpts, avs) -} - -// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. -// -// Solidity: function getAVSRegistrar(address avs) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAVSRegistrar(avs common.Address) (common.Address, error) { - return _AllocationManagerStorage.Contract.GetAVSRegistrar(&_AllocationManagerStorage.CallOpts, avs) -} - -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. -// -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. -// -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetAllocatableMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. -// -// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetAllocatableMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. -// -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocatedSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocatedSets", operator) - - if err != nil { - return *new([]OperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) - - return out0, err - -} - -// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. -// -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManagerStorage.Contract.GetAllocatedSets(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. -// -// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManagerStorage.Contract.GetAllocatedSets(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. -// -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocatedStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocatedStake", operatorSet, operators, strategies) - - if err != nil { - return *new([][]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([][]*big.Int)).(*[][]*big.Int) - - return out0, err - -} - -// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. -// -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { - return _AllocationManagerStorage.Contract.GetAllocatedStake(&_AllocationManagerStorage.CallOpts, operatorSet, operators, strategies) -} - -// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. -// -// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { - return _AllocationManagerStorage.Contract.GetAllocatedStake(&_AllocationManagerStorage.CallOpts, operatorSet, operators, strategies) -} - -// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. -// -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocatedStrategies(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocatedStrategies", operator, operatorSet) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. -// -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetAllocatedStrategies(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. -// -// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetAllocatedStrategies(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. -// -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocation(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocation", operator, operatorSet, strategy) - - if err != nil { - return *new(IAllocationManagerTypesAllocation), err - } - - out0 := *abi.ConvertType(out[0], new(IAllocationManagerTypesAllocation)).(*IAllocationManagerTypesAllocation) - - return out0, err - -} - -// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. -// -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetAllocation(&_AllocationManagerStorage.CallOpts, operator, operatorSet, strategy) -} - -// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. -// -// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetAllocation(&_AllocationManagerStorage.CallOpts, operator, operatorSet, strategy) -} - -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. -// -// Solidity: function getAllocationDelay(address operator) view returns(bool isSet, uint32 delay) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (struct { - IsSet bool - Delay uint32 -}, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocationDelay", operator) - - outstruct := new(struct { - IsSet bool - Delay uint32 - }) - if err != nil { - return *outstruct, err - } - - outstruct.IsSet = *abi.ConvertType(out[0], new(bool)).(*bool) - outstruct.Delay = *abi.ConvertType(out[1], new(uint32)).(*uint32) - - return *outstruct, err - -} - -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. -// -// Solidity: function getAllocationDelay(address operator) view returns(bool isSet, uint32 delay) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocationDelay(operator common.Address) (struct { - IsSet bool - Delay uint32 -}, error) { - return _AllocationManagerStorage.Contract.GetAllocationDelay(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. -// -// Solidity: function getAllocationDelay(address operator) view returns(bool isSet, uint32 delay) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocationDelay(operator common.Address) (struct { - IsSet bool - Delay uint32 -}, error) { - return _AllocationManagerStorage.Contract.GetAllocationDelay(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. -// -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetAllocations(opts *bind.CallOpts, operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getAllocations", operators, operatorSet, strategy) - - if err != nil { - return *new([]IAllocationManagerTypesAllocation), err - } - - out0 := *abi.ConvertType(out[0], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) - - return out0, err - -} - -// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. -// -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetAllocations(&_AllocationManagerStorage.CallOpts, operators, operatorSet, strategy) -} - -// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. -// -// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetAllocations(&_AllocationManagerStorage.CallOpts, operators, operatorSet, strategy) -} - -// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. -// -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetEncumberedMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getEncumberedMagnitude", operator, strategy) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. -// -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetEncumberedMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. -// -// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetEncumberedMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. -// -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMaxMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMaxMagnitude", operator, strategy) - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. -// -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. -// -// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitude(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. -// -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMaxMagnitudes(opts *bind.CallOpts, operators []common.Address, strategy common.Address) ([]uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMaxMagnitudes", operators, strategy) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. -// -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudes(&_AllocationManagerStorage.CallOpts, operators, strategy) -} - -// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. -// -// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudes(&_AllocationManagerStorage.CallOpts, operators, strategy) -} - -// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. -// -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMaxMagnitudes0(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMaxMagnitudes0", operator, strategies) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. -// -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudes0(&_AllocationManagerStorage.CallOpts, operator, strategies) -} - -// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. -// -// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudes0(&_AllocationManagerStorage.CallOpts, operator, strategies) -} - -// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. -// -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMaxMagnitudesAtBlock(opts *bind.CallOpts, operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMaxMagnitudesAtBlock", operator, strategies, blockNumber) - - if err != nil { - return *new([]uint64), err - } - - out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) - - return out0, err - -} - -// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. -// -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudesAtBlock(&_AllocationManagerStorage.CallOpts, operator, strategies, blockNumber) -} - -// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. -// -// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { - return _AllocationManagerStorage.Contract.GetMaxMagnitudesAtBlock(&_AllocationManagerStorage.CallOpts, operator, strategies, blockNumber) -} - -// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. -// -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMemberCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMemberCount", operatorSet) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. -// -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetMemberCount(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. -// -// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetMemberCount(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. -// -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[] operators) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMembers(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMembers", operatorSet) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. -// -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[] operators) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetMembers(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. -// -// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[] operators) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetMembers(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. -// -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetMinimumSlashableStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getMinimumSlashableStake", operatorSet, operators, strategies, futureBlock) - - if err != nil { - return *new([][]*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new([][]*big.Int)).(*[][]*big.Int) - - return out0, err - -} - -// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. -// -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { - return _AllocationManagerStorage.Contract.GetMinimumSlashableStake(&_AllocationManagerStorage.CallOpts, operatorSet, operators, strategies, futureBlock) -} - -// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. -// -// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { - return _AllocationManagerStorage.Contract.GetMinimumSlashableStake(&_AllocationManagerStorage.CallOpts, operatorSet, operators, strategies, futureBlock) -} - -// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. -// -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetOperatorSetCount(opts *bind.CallOpts, avs common.Address) (*big.Int, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getOperatorSetCount", avs) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. -// -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetOperatorSetCount(&_AllocationManagerStorage.CallOpts, avs) -} - -// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. -// -// Solidity: function getOperatorSetCount(address avs) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetOperatorSetCount(&_AllocationManagerStorage.CallOpts, avs) -} - -// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. -// -// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetRedistributionRecipient(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getRedistributionRecipient", operatorSet) - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. -// -// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetRedistributionRecipient(operatorSet OperatorSet) (common.Address, error) { - return _AllocationManagerStorage.Contract.GetRedistributionRecipient(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. -// -// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetRedistributionRecipient(operatorSet OperatorSet) (common.Address, error) { - return _AllocationManagerStorage.Contract.GetRedistributionRecipient(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. -// -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[] operatorSets) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetRegisteredSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getRegisteredSets", operator) - - if err != nil { - return *new([]OperatorSet), err - } - - out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) - - return out0, err - -} - -// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. -// -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[] operatorSets) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManagerStorage.Contract.GetRegisteredSets(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. -// -// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[] operatorSets) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { - return _AllocationManagerStorage.Contract.GetRegisteredSets(&_AllocationManagerStorage.CallOpts, operator) -} - -// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. -// -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetSlashCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getSlashCount", operatorSet) - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. -// -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetSlashCount(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. -// -// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { - return _AllocationManagerStorage.Contract.GetSlashCount(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. -// -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[] strategies) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetStrategiesInOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getStrategiesInOperatorSet", operatorSet) - - if err != nil { - return *new([]common.Address), err - } - - out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) - - return out0, err - -} - -// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. -// -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[] strategies) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetStrategiesInOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. -// -// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[] strategies) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { - return _AllocationManagerStorage.Contract.GetStrategiesInOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. -// -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) GetStrategyAllocations(opts *bind.CallOpts, operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "getStrategyAllocations", operator, strategy) - - if err != nil { - return *new([]OperatorSet), *new([]IAllocationManagerTypesAllocation), err - } - - out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) - out1 := *abi.ConvertType(out[1], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) - - return out0, out1, err - -} - -// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. -// -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetStrategyAllocations(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. -// -// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { - return _AllocationManagerStorage.Contract.GetStrategyAllocations(&_AllocationManagerStorage.CallOpts, operator, strategy) -} - -// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. -// -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) IsMemberOfOperatorSet(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) (bool, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "isMemberOfOperatorSet", operator, operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. -// -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsMemberOfOperatorSet(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. -// -// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsMemberOfOperatorSet(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. -// -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) IsOperatorRedistributable(opts *bind.CallOpts, operator common.Address) (bool, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "isOperatorRedistributable", operator) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. -// -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageSession) IsOperatorRedistributable(operator common.Address) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorRedistributable(&_AllocationManagerStorage.CallOpts, operator) -} - -// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. -// -// Solidity: function isOperatorRedistributable(address operator) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) IsOperatorRedistributable(operator common.Address) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorRedistributable(&_AllocationManagerStorage.CallOpts, operator) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. -// -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) IsOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) (bool, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "isOperatorSet", operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. -// -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. -// -// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) (bool, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "isOperatorSlashable", operator, operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageSession) IsOperatorSlashable(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorSlashable(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. -// -// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) IsOperatorSlashable(operator common.Address, operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsOperatorSlashable(&_AllocationManagerStorage.CallOpts, operator, operatorSet) -} - -// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. -// -// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) IsRedistributingOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) (bool, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "isRedistributingOperatorSet", operatorSet) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. -// -// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageSession) IsRedistributingOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsRedistributingOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. -// -// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) IsRedistributingOperatorSet(operatorSet OperatorSet) (bool, error) { - return _AllocationManagerStorage.Contract.IsRedistributingOperatorSet(&_AllocationManagerStorage.CallOpts, operatorSet) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AllocationManagerStorage *AllocationManagerStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _AllocationManagerStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AllocationManagerStorage *AllocationManagerStorageSession) Version() (string, error) { - return _AllocationManagerStorage.Contract.Version(&_AllocationManagerStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) Version() (string, error) { - return _AllocationManagerStorage.Contract.Version(&_AllocationManagerStorage.CallOpts) -} - -// AddStrategiesToOperatorSet is a paid mutator transaction binding the contract method 0x50feea20. -// -// Solidity: function addStrategiesToOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) AddStrategiesToOperatorSet(opts *bind.TransactOpts, avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "addStrategiesToOperatorSet", avs, operatorSetId, strategies) -} - -// AddStrategiesToOperatorSet is a paid mutator transaction binding the contract method 0x50feea20. -// -// Solidity: function addStrategiesToOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) AddStrategiesToOperatorSet(avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.AddStrategiesToOperatorSet(&_AllocationManagerStorage.TransactOpts, avs, operatorSetId, strategies) -} - -// AddStrategiesToOperatorSet is a paid mutator transaction binding the contract method 0x50feea20. -// -// Solidity: function addStrategiesToOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) AddStrategiesToOperatorSet(avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.AddStrategiesToOperatorSet(&_AllocationManagerStorage.TransactOpts, avs, operatorSetId, strategies) -} - -// ClearDeallocationQueue is a paid mutator transaction binding the contract method 0x4b5046ef. -// -// Solidity: function clearDeallocationQueue(address operator, address[] strategies, uint16[] numToClear) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) ClearDeallocationQueue(opts *bind.TransactOpts, operator common.Address, strategies []common.Address, numToClear []uint16) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "clearDeallocationQueue", operator, strategies, numToClear) -} - -// ClearDeallocationQueue is a paid mutator transaction binding the contract method 0x4b5046ef. -// -// Solidity: function clearDeallocationQueue(address operator, address[] strategies, uint16[] numToClear) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) ClearDeallocationQueue(operator common.Address, strategies []common.Address, numToClear []uint16) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.ClearDeallocationQueue(&_AllocationManagerStorage.TransactOpts, operator, strategies, numToClear) -} - -// ClearDeallocationQueue is a paid mutator transaction binding the contract method 0x4b5046ef. -// -// Solidity: function clearDeallocationQueue(address operator, address[] strategies, uint16[] numToClear) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) ClearDeallocationQueue(operator common.Address, strategies []common.Address, numToClear []uint16) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.ClearDeallocationQueue(&_AllocationManagerStorage.TransactOpts, operator, strategies, numToClear) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0x261f84e0. -// -// Solidity: function createOperatorSets(address avs, (uint32,address[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) CreateOperatorSets(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParams) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "createOperatorSets", avs, params) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0x261f84e0. -// -// Solidity: function createOperatorSets(address avs, (uint32,address[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) CreateOperatorSets(avs common.Address, params []IAllocationManagerTypesCreateSetParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.CreateOperatorSets(&_AllocationManagerStorage.TransactOpts, avs, params) -} - -// CreateOperatorSets is a paid mutator transaction binding the contract method 0x261f84e0. -// -// Solidity: function createOperatorSets(address avs, (uint32,address[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) CreateOperatorSets(avs common.Address, params []IAllocationManagerTypesCreateSetParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.CreateOperatorSets(&_AllocationManagerStorage.TransactOpts, avs, params) -} - -// CreateRedistributingOperatorSets is a paid mutator transaction binding the contract method 0x32a879e4. -// -// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[])[] params, address[] redistributionRecipients) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) CreateRedistributingOperatorSets(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParams, redistributionRecipients []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "createRedistributingOperatorSets", avs, params, redistributionRecipients) -} - -// CreateRedistributingOperatorSets is a paid mutator transaction binding the contract method 0x32a879e4. -// -// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[])[] params, address[] redistributionRecipients) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) CreateRedistributingOperatorSets(avs common.Address, params []IAllocationManagerTypesCreateSetParams, redistributionRecipients []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.CreateRedistributingOperatorSets(&_AllocationManagerStorage.TransactOpts, avs, params, redistributionRecipients) -} - -// CreateRedistributingOperatorSets is a paid mutator transaction binding the contract method 0x32a879e4. -// -// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[])[] params, address[] redistributionRecipients) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) CreateRedistributingOperatorSets(avs common.Address, params []IAllocationManagerTypesCreateSetParams, redistributionRecipients []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.CreateRedistributingOperatorSets(&_AllocationManagerStorage.TransactOpts, avs, params, redistributionRecipients) -} - -// DeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x6e3492b5. -// -// Solidity: function deregisterFromOperatorSets((address,address,uint32[]) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) DeregisterFromOperatorSets(opts *bind.TransactOpts, params IAllocationManagerTypesDeregisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "deregisterFromOperatorSets", params) -} - -// DeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x6e3492b5. -// -// Solidity: function deregisterFromOperatorSets((address,address,uint32[]) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) DeregisterFromOperatorSets(params IAllocationManagerTypesDeregisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.DeregisterFromOperatorSets(&_AllocationManagerStorage.TransactOpts, params) -} - -// DeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x6e3492b5. -// -// Solidity: function deregisterFromOperatorSets((address,address,uint32[]) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) DeregisterFromOperatorSets(params IAllocationManagerTypesDeregisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.DeregisterFromOperatorSets(&_AllocationManagerStorage.TransactOpts, params) -} - -// Initialize is a paid mutator transaction binding the contract method 0xfe4b84df. -// -// Solidity: function initialize(uint256 initialPausedStatus) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) Initialize(opts *bind.TransactOpts, initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "initialize", initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0xfe4b84df. -// -// Solidity: function initialize(uint256 initialPausedStatus) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) Initialize(initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.Initialize(&_AllocationManagerStorage.TransactOpts, initialPausedStatus) -} - -// Initialize is a paid mutator transaction binding the contract method 0xfe4b84df. -// -// Solidity: function initialize(uint256 initialPausedStatus) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) Initialize(initialPausedStatus *big.Int) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.Initialize(&_AllocationManagerStorage.TransactOpts, initialPausedStatus) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0x952899ee. -// -// Solidity: function modifyAllocations(address operator, ((address,uint32),address[],uint64[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) ModifyAllocations(opts *bind.TransactOpts, operator common.Address, params []IAllocationManagerTypesAllocateParams) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "modifyAllocations", operator, params) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0x952899ee. -// -// Solidity: function modifyAllocations(address operator, ((address,uint32),address[],uint64[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) ModifyAllocations(operator common.Address, params []IAllocationManagerTypesAllocateParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.ModifyAllocations(&_AllocationManagerStorage.TransactOpts, operator, params) -} - -// ModifyAllocations is a paid mutator transaction binding the contract method 0x952899ee. -// -// Solidity: function modifyAllocations(address operator, ((address,uint32),address[],uint64[])[] params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) ModifyAllocations(operator common.Address, params []IAllocationManagerTypesAllocateParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.ModifyAllocations(&_AllocationManagerStorage.TransactOpts, operator, params) -} - -// RegisterForOperatorSets is a paid mutator transaction binding the contract method 0xadc2e3d9. -// -// Solidity: function registerForOperatorSets(address operator, (address,uint32[],bytes) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) RegisterForOperatorSets(opts *bind.TransactOpts, operator common.Address, params IAllocationManagerTypesRegisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "registerForOperatorSets", operator, params) -} - -// RegisterForOperatorSets is a paid mutator transaction binding the contract method 0xadc2e3d9. -// -// Solidity: function registerForOperatorSets(address operator, (address,uint32[],bytes) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) RegisterForOperatorSets(operator common.Address, params IAllocationManagerTypesRegisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.RegisterForOperatorSets(&_AllocationManagerStorage.TransactOpts, operator, params) -} - -// RegisterForOperatorSets is a paid mutator transaction binding the contract method 0xadc2e3d9. -// -// Solidity: function registerForOperatorSets(address operator, (address,uint32[],bytes) params) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) RegisterForOperatorSets(operator common.Address, params IAllocationManagerTypesRegisterParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.RegisterForOperatorSets(&_AllocationManagerStorage.TransactOpts, operator, params) -} - -// RemoveStrategiesFromOperatorSet is a paid mutator transaction binding the contract method 0xb66bd989. -// -// Solidity: function removeStrategiesFromOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) RemoveStrategiesFromOperatorSet(opts *bind.TransactOpts, avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "removeStrategiesFromOperatorSet", avs, operatorSetId, strategies) -} - -// RemoveStrategiesFromOperatorSet is a paid mutator transaction binding the contract method 0xb66bd989. -// -// Solidity: function removeStrategiesFromOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) RemoveStrategiesFromOperatorSet(avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.RemoveStrategiesFromOperatorSet(&_AllocationManagerStorage.TransactOpts, avs, operatorSetId, strategies) -} - -// RemoveStrategiesFromOperatorSet is a paid mutator transaction binding the contract method 0xb66bd989. -// -// Solidity: function removeStrategiesFromOperatorSet(address avs, uint32 operatorSetId, address[] strategies) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) RemoveStrategiesFromOperatorSet(avs common.Address, operatorSetId uint32, strategies []common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.RemoveStrategiesFromOperatorSet(&_AllocationManagerStorage.TransactOpts, avs, operatorSetId, strategies) -} - -// SetAVSRegistrar is a paid mutator transaction binding the contract method 0xd3d96ff4. -// -// Solidity: function setAVSRegistrar(address avs, address registrar) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) SetAVSRegistrar(opts *bind.TransactOpts, avs common.Address, registrar common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "setAVSRegistrar", avs, registrar) -} + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -// SetAVSRegistrar is a paid mutator transaction binding the contract method 0xd3d96ff4. -// -// Solidity: function setAVSRegistrar(address avs, address registrar) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) SetAVSRegistrar(avs common.Address, registrar common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SetAVSRegistrar(&_AllocationManagerStorage.TransactOpts, avs, registrar) -} + return out0, err -// SetAVSRegistrar is a paid mutator transaction binding the contract method 0xd3d96ff4. -// -// Solidity: function setAVSRegistrar(address avs, address registrar) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) SetAVSRegistrar(avs common.Address, registrar common.Address) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SetAVSRegistrar(&_AllocationManagerStorage.TransactOpts, avs, registrar) } -// SetAllocationDelay is a paid mutator transaction binding the contract method 0x56c483e6. +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // -// Solidity: function setAllocationDelay(address operator, uint32 delay) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) SetAllocationDelay(opts *bind.TransactOpts, operator common.Address, delay uint32) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "setAllocationDelay", operator, delay) +// Solidity: function delegation() view returns(address) +func (_AllocationManagerStorage *AllocationManagerStorageSession) Delegation() (common.Address, error) { + return _AllocationManagerStorage.Contract.Delegation(&_AllocationManagerStorage.CallOpts) } -// SetAllocationDelay is a paid mutator transaction binding the contract method 0x56c483e6. +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. // -// Solidity: function setAllocationDelay(address operator, uint32 delay) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) SetAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SetAllocationDelay(&_AllocationManagerStorage.TransactOpts, operator, delay) +// Solidity: function delegation() view returns(address) +func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) Delegation() (common.Address, error) { + return _AllocationManagerStorage.Contract.Delegation(&_AllocationManagerStorage.CallOpts) } -// SetAllocationDelay is a paid mutator transaction binding the contract method 0x56c483e6. +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. // -// Solidity: function setAllocationDelay(address operator, uint32 delay) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) SetAllocationDelay(operator common.Address, delay uint32) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SetAllocationDelay(&_AllocationManagerStorage.TransactOpts, operator, delay) -} +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerStorage *AllocationManagerStorageCaller) EigenStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AllocationManagerStorage.contract.Call(opts, &out, "eigenStrategy") -// SlashOperator is a paid mutator transaction binding the contract method 0x36352057. -// -// Solidity: function slashOperator(address avs, (address,uint32,address[],uint256[],string) params) returns(uint256 slashId, uint256[] shares) -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) SlashOperator(opts *bind.TransactOpts, avs common.Address, params IAllocationManagerTypesSlashingParams) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "slashOperator", avs, params) -} + if err != nil { + return *new(common.Address), err + } -// SlashOperator is a paid mutator transaction binding the contract method 0x36352057. -// -// Solidity: function slashOperator(address avs, (address,uint32,address[],uint256[],string) params) returns(uint256 slashId, uint256[] shares) -func (_AllocationManagerStorage *AllocationManagerStorageSession) SlashOperator(avs common.Address, params IAllocationManagerTypesSlashingParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SlashOperator(&_AllocationManagerStorage.TransactOpts, avs, params) -} + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) -// SlashOperator is a paid mutator transaction binding the contract method 0x36352057. -// -// Solidity: function slashOperator(address avs, (address,uint32,address[],uint256[],string) params) returns(uint256 slashId, uint256[] shares) -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) SlashOperator(avs common.Address, params IAllocationManagerTypesSlashingParams) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.SlashOperator(&_AllocationManagerStorage.TransactOpts, avs, params) -} + return out0, err -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa9821821. -// -// Solidity: function updateAVSMetadataURI(address avs, string metadataURI) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactor) UpdateAVSMetadataURI(opts *bind.TransactOpts, avs common.Address, metadataURI string) (*types.Transaction, error) { - return _AllocationManagerStorage.contract.Transact(opts, "updateAVSMetadataURI", avs, metadataURI) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa9821821. +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. // -// Solidity: function updateAVSMetadataURI(address avs, string metadataURI) returns() -func (_AllocationManagerStorage *AllocationManagerStorageSession) UpdateAVSMetadataURI(avs common.Address, metadataURI string) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.UpdateAVSMetadataURI(&_AllocationManagerStorage.TransactOpts, avs, metadataURI) +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerStorage *AllocationManagerStorageSession) EigenStrategy() (common.Address, error) { + return _AllocationManagerStorage.Contract.EigenStrategy(&_AllocationManagerStorage.CallOpts) } -// UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa9821821. +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. // -// Solidity: function updateAVSMetadataURI(address avs, string metadataURI) returns() -func (_AllocationManagerStorage *AllocationManagerStorageTransactorSession) UpdateAVSMetadataURI(avs common.Address, metadataURI string) (*types.Transaction, error) { - return _AllocationManagerStorage.Contract.UpdateAVSMetadataURI(&_AllocationManagerStorage.TransactOpts, avs, metadataURI) +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerStorage *AllocationManagerStorageCallerSession) EigenStrategy() (common.Address, error) { + return _AllocationManagerStorage.Contract.EigenStrategy(&_AllocationManagerStorage.CallOpts) } // AllocationManagerStorageAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AllocationManagerStorage contract. @@ -3032,6 +1833,277 @@ func (_AllocationManagerStorage *AllocationManagerStorageFilterer) ParseRedistri return event, nil } +// AllocationManagerStorageSlasherMigratedIterator is returned from FilterSlasherMigrated and is used to iterate over the raw logs and unpacked data for SlasherMigrated events raised by the AllocationManagerStorage contract. +type AllocationManagerStorageSlasherMigratedIterator struct { + Event *AllocationManagerStorageSlasherMigrated // 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 *AllocationManagerStorageSlasherMigratedIterator) 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(AllocationManagerStorageSlasherMigrated) + 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(AllocationManagerStorageSlasherMigrated) + 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 *AllocationManagerStorageSlasherMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerStorageSlasherMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerStorageSlasherMigrated represents a SlasherMigrated event raised by the AllocationManagerStorage contract. +type AllocationManagerStorageSlasherMigrated struct { + OperatorSet OperatorSet + Slasher common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherMigrated is a free log retrieval operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) FilterSlasherMigrated(opts *bind.FilterOpts) (*AllocationManagerStorageSlasherMigratedIterator, error) { + + logs, sub, err := _AllocationManagerStorage.contract.FilterLogs(opts, "SlasherMigrated") + if err != nil { + return nil, err + } + return &AllocationManagerStorageSlasherMigratedIterator{contract: _AllocationManagerStorage.contract, event: "SlasherMigrated", logs: logs, sub: sub}, nil +} + +// WatchSlasherMigrated is a free log subscription operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) WatchSlasherMigrated(opts *bind.WatchOpts, sink chan<- *AllocationManagerStorageSlasherMigrated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerStorage.contract.WatchLogs(opts, "SlasherMigrated") + 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(AllocationManagerStorageSlasherMigrated) + if err := _AllocationManagerStorage.contract.UnpackLog(event, "SlasherMigrated", 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 +} + +// ParseSlasherMigrated is a log parse operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) ParseSlasherMigrated(log types.Log) (*AllocationManagerStorageSlasherMigrated, error) { + event := new(AllocationManagerStorageSlasherMigrated) + if err := _AllocationManagerStorage.contract.UnpackLog(event, "SlasherMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerStorageSlasherUpdatedIterator is returned from FilterSlasherUpdated and is used to iterate over the raw logs and unpacked data for SlasherUpdated events raised by the AllocationManagerStorage contract. +type AllocationManagerStorageSlasherUpdatedIterator struct { + Event *AllocationManagerStorageSlasherUpdated // 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 *AllocationManagerStorageSlasherUpdatedIterator) 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(AllocationManagerStorageSlasherUpdated) + 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(AllocationManagerStorageSlasherUpdated) + 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 *AllocationManagerStorageSlasherUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerStorageSlasherUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerStorageSlasherUpdated represents a SlasherUpdated event raised by the AllocationManagerStorage contract. +type AllocationManagerStorageSlasherUpdated struct { + OperatorSet OperatorSet + Slasher common.Address + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherUpdated is a free log retrieval operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) FilterSlasherUpdated(opts *bind.FilterOpts) (*AllocationManagerStorageSlasherUpdatedIterator, error) { + + logs, sub, err := _AllocationManagerStorage.contract.FilterLogs(opts, "SlasherUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerStorageSlasherUpdatedIterator{contract: _AllocationManagerStorage.contract, event: "SlasherUpdated", logs: logs, sub: sub}, nil +} + +// WatchSlasherUpdated is a free log subscription operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) WatchSlasherUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerStorageSlasherUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerStorage.contract.WatchLogs(opts, "SlasherUpdated") + 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(AllocationManagerStorageSlasherUpdated) + if err := _AllocationManagerStorage.contract.UnpackLog(event, "SlasherUpdated", 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 +} + +// ParseSlasherUpdated is a log parse operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerStorage *AllocationManagerStorageFilterer) ParseSlasherUpdated(log types.Log) (*AllocationManagerStorageSlasherUpdated, error) { + event := new(AllocationManagerStorageSlasherUpdated) + if err := _AllocationManagerStorage.contract.UnpackLog(event, "SlasherUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // AllocationManagerStorageStrategyAddedToOperatorSetIterator is returned from FilterStrategyAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyAddedToOperatorSet events raised by the AllocationManagerStorage contract. type AllocationManagerStorageStrategyAddedToOperatorSetIterator struct { Event *AllocationManagerStorageStrategyAddedToOperatorSet // Event containing the contract specifics and raw log diff --git a/pkg/bindings/AllocationManagerView/binding.go b/pkg/bindings/AllocationManagerView/binding.go new file mode 100644 index 0000000000..d4eaa2eb0a --- /dev/null +++ b/pkg/bindings/AllocationManagerView/binding.go @@ -0,0 +1,3306 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package AllocationManagerView + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IAllocationManagerTypesAllocation is an auto generated low-level Go binding around an user-defined struct. +type IAllocationManagerTypesAllocation struct { + CurrentMagnitude uint64 + PendingDiff *big.Int + EffectBlock uint32 +} + +// OperatorSet is an auto generated low-level Go binding around an user-defined struct. +type OperatorSet struct { + Avs common.Address + Id uint32 +} + +// AllocationManagerViewMetaData contains all meta data concerning the AllocationManagerView contract. +var AllocationManagerViewMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_eigenStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"_DEALLOCATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_ALLOCATION_CONFIGURATION_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"futureBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherMigrated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetAlreadyMigrated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OutOfBounds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SlasherNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", + Bin: "0x610100604052348015610010575f5ffd5b5060405161273838038061273883398101604081905261002f91610087565b6001600160a01b039384166080529290911660a05263ffffffff90811660c0521660e0526100dd565b6001600160a01b038116811461006c575f5ffd5b50565b805163ffffffff81168114610082575f5ffd5b919050565b5f5f5f5f6080858703121561009a575f5ffd5b84516100a581610058565b60208601519094506100b681610058565b92506100c46040860161006f565b91506100d26060860161006f565b905092959194509250565b60805160a05160c05160e0516126216101175f395f61041c01525f6102a101525f61053b01525f818161057501526113b001526126215ff3fe608060405234801561000f575f5ffd5b50600436106101f2575f3560e01c80636e875dba11610114578063ba1a84e5116100a9578063db4df76111610079578063db4df76114610536578063dc2af6921461055d578063df5cf72314610570578063f231bd0814610597578063f605ce08146105aa575f5ffd5b8063ba1a84e5146104c6578063c221d8ae146104d9578063d4a3fcce146104ec578063d7794857146104ff575f5ffd5b806394d7d00c116100e457806394d7d00c1461045e578063a9333ec814610471578063b2447af714610484578063b9fbaed114610497575f5ffd5b80636e875dba146103f157806379ae50cd146104045780637bc1ef61146104175780638ce648541461043e575f5ffd5b8063304c10cd1161018a5780634cfd29391161015a5780634cfd29391461037f578063547afb87146103a0578063670d3ba2146103b35780636cfb4481146103c6575f5ffd5b8063304c10cd1461030b57806340120dab1461031e5780634177a87c1461033f5780634a10ffe51461035f575f5ffd5b8063260dc758116101c5578063260dc758146102895780632981eb771461029c5780632b453a9a146102d85780632bab2c4a146102f8575f5ffd5b80630f3df50e146101f657806310e1b9b8146102265780631352c3e61461024657806315fe502814610269575b5f5ffd5b610209610204366004611da6565b6105bd565b6040516001600160a01b0390911681526020015b60405180910390f35b610239610234366004611dc0565b6105fe565b60405161021d9190611e07565b610259610254366004611e3a565b610637565b604051901515815260200161021d565b61027c610277366004611e6e565b6106b2565b60405161021d9190611ede565b610259610297366004611da6565b6107c9565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161021d565b6102eb6102e6366004611f85565b6107fa565b60405161021d9190611ff8565b6102eb610306366004612084565b610810565b610209610319366004611e6e565b6108af565b61033161032c366004612108565b6108de565b60405161021d9291906121a0565b61035261034d366004611da6565b610a57565b60405161021d91906121fd565b61037261036d36600461220f565b610a7b565b60405161021d9190612252565b61039261038d366004611da6565b610b23565b60405190815260200161021d565b6103726103ae36600461229d565b610b45565b6102596103c1366004611e3a565b610bed565b6103d96103d4366004612108565b610c19565b6040516001600160401b03909116815260200161021d565b6103526103ff366004611da6565b610c2e565b61027c610412366004611e6e565b610c3f565b6102c37f000000000000000000000000000000000000000000000000000000000000000081565b61045161044c3660046122df565b610d19565b60405161021d9190612322565b61037261046c366004612334565b610dd5565b6103d961047f366004612108565b610ec1565b610392610492366004611da6565b610ef0565b6104aa6104a5366004611e6e565b610f12565b60408051921515835263ffffffff90911660208301520161021d565b6103926104d4366004611e6e565b610fb3565b6103526104e7366004611e3a565b610fd3565b6102096104fa366004611da6565b610ffc565b61051261050d366004611da6565b611083565b604080516001600160a01b03909316835263ffffffff90911660208301520161021d565b6102097f000000000000000000000000000000000000000000000000000000000000000081565b61025961056b366004611e6e565b611104565b6102097f000000000000000000000000000000000000000000000000000000000000000081565b6102596105a5366004611da6565b611137565b6103d96105b8366004612108565b611156565b5f5f60a65f6105cb85611162565b815260208101919091526040015f20546001600160a01b0316905080156105f257806105f7565b620e16e45b9392505050565b604080516060810182525f808252602082018190529181018290529061062d8561062786611162565b856111c5565b9695505050505050565b6001600160a01b0382165f908152609e6020526040812081908161065a85611162565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff16928201929092529150806106a85750806020015163ffffffff164311155b9150505b92915050565b6001600160a01b0381165f908152609d60205260408120606091906106d690611331565b90505f816001600160401b038111156106f1576106f1611cdb565b60405190808252806020026020018201604052801561073557816020015b604080518082019091525f808252602082015281526020019060019003908161070f5790505b5090505f5b828110156107c1576001600160a01b0385165f908152609d6020526040902061079c90610767908361133a565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b8282815181106107ae576107ae61238f565b602090810291909101015260010161073a565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206106ac9163ffffffff9081169061134516565b60606108088484844361135c565b949350505050565b606061081e8585858561135c565b90505f5b84518110156108a65761084e8582815181106108405761084061238f565b602002602001015187610637565b61089e575f5b845181101561089c575f8383815181106108705761087061238f565b602002602001015182815181106108895761088961238f565b6020908102919091010152600101610854565b505b600101610822565b50949350505050565b6001600160a01b038082165f9081526097602052604081205490911680156108d757806105f7565b5090919050565b6001600160a01b0382165f908152609d60205260408120606091829161090390611331565b90505f816001600160401b0381111561091e5761091e611cdb565b60405190808252806020026020018201604052801561096257816020015b604080518082019091525f808252602082015281526020019060019003908161093c5790505b5090505f826001600160401b0381111561097e5761097e611cdb565b6040519080825280602002602001820160405280156109c757816020015b604080516060810182525f80825260208083018290529282015282525f1990920191018161099c5790505b5090505f5b83811015610a4a576001600160a01b0388165f908152609d602052604081206109f990610767908461133a565b905080848381518110610a0e57610a0e61238f565b6020026020010181905250610a2489828a6105fe565b838381518110610a3657610a3661238f565b6020908102919091010152506001016109cc565b5090969095509350505050565b60605f6105f760995f610a6986611162565b81526020019081526020015f20611649565b60605f83516001600160401b03811115610a9757610a97611cdb565b604051908082528060200260200182016040528015610ac0578160200160208202803683370190505b5090505f5b84518110156107c157610af1858281518110610ae357610ae361238f565b602002602001015185610ec1565b828281518110610b0357610b0361238f565b6001600160401b0390921660209283029190910190910152600101610ac5565b5f60a55f610b3084611162565b81526020019081526020015f20549050919050565b60605f82516001600160401b03811115610b6157610b61611cdb565b604051908082528060200260200182016040528015610b8a578160200160208202803683370190505b5090505f5b83518110156107c157610bbb85858381518110610bae57610bae61238f565b6020026020010151610ec1565b828281518110610bcd57610bcd61238f565b6001600160401b0390921660209283029190910190910152600101610b8f565b5f6105f783609a5f610bfe86611162565b81526020019081526020015f2061165590919063ffffffff16565b5f5f610c258484611676565b95945050505050565b60606106ac609a5f610a6985611162565b6001600160a01b0381165f908152609c6020526040812060609190610c6390611331565b90505f816001600160401b03811115610c7e57610c7e611cdb565b604051908082528060200260200182016040528015610cc257816020015b604080518082019091525f8082526020820152815260200190600190039081610c9c5790505b5090505f5b828110156107c1576001600160a01b0385165f908152609c60205260409020610cf490610767908361133a565b828281518110610d0657610d0661238f565b6020908102919091010152600101610cc7565b60605f84516001600160401b03811115610d3557610d35611cdb565b604051908082528060200260200182016040528015610d7e57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610d535790505b5090505f5b85518110156108a657610db0868281518110610da157610da161238f565b602002602001015186866105fe565b828281518110610dc257610dc261238f565b6020908102919091010152600101610d83565b60605f83516001600160401b03811115610df157610df1611cdb565b604051908082528060200260200182016040528015610e1a578160200160208202803683370190505b5090505f5b84518110156108a6576001600160a01b0386165f90815260a1602052604081208651610e8f92879291899086908110610e5a57610e5a61238f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206117e590919063ffffffff16565b828281518110610ea157610ea161238f565b6001600160401b0390921660209283029190910190910152600101610e1f565b6001600160a01b038083165f90815260a16020908152604080832093851683529290529081206105f7906117f9565b5f6106ac609a5f610f0085611162565b81526020019081526020015f20611331565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff64010000000084041615159584018690526501000000000083048216948401949094526901000000000000000000909104166060820181905284939192919015801590610f9a5750826060015163ffffffff164310155b15610fa9575050604081015160015b9590945092505050565b6001600160a01b0381165f9081526098602052604081206106ac90611331565b6001600160a01b0382165f908152609f60205260408120606091906106a89082610a6986611162565b5f5f60a75f61100a85611162565b815260208082019290925260409081015f20815160608101835281546001600160a01b0390811680835260019093015490811694820194909452600160a01b90930463ffffffff16918301829052919250158015906110735750816040015163ffffffff164310155b156105f757506020015192915050565b5f5f5f5f5f60a75f61109488611162565b815260208082019290925260409081015f20815160608101835281546001600160a01b03908116825260019092015491821693810193909352600160a01b900463ffffffff169082018190529091504310156110f95780602001519250806040015191505b509094909350915050565b5f5f61110f83610c3f565b90505f61111b846106b2565b9050611127848361180c565b806108085750610808848261180c565b5f620e16e4611145836105bd565b6001600160a01b0316141592915050565b5f5f6108a68484611676565b5f815f0151826020015163ffffffff166040516020016111ad92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526106ac906123a3565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190611225906117f9565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff169181018290529192504310156112c7579092509050611329565b6112d8815f01518260200151611884565b6001600160401b0316815260208101515f600f9190910b12156113165761130782602001518260200151611884565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b5f6106ac825490565b5f6105f783836118a3565b5f81815260018301602052604081205415156105f7565b606083516001600160401b0381111561137757611377611cdb565b6040519080825280602002602001820160405280156113aa57816020015b60608152602001906001900390816113955790505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f0e0e67686866040518363ffffffff1660e01b81526004016113fc9291906123c9565b5f60405180830381865afa158015611416573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261143d91908101906123ed565b90505f5b855181101561163f575f86828151811061145d5761145d61238f565b6020026020010151905085516001600160401b0381111561148057611480611cdb565b6040519080825280602002602001820160405280156114a9578160200160208202803683370190505b508483815181106114bc576114bc61238f565b60209081029190910101525f5b8651811015611635575f8782815181106114e5576114e561238f565b6020908102919091018101516001600160a01b038086165f90815260a1845260408082209284168252919093528220909250611520906117f9565b9050806001600160401b03165f0361153957505061162d565b5f611545858d856105fe565b90508863ffffffff16816040015163ffffffff161115801561156d57505f8160200151600f0b125b1561158f57611583815f01518260200151611884565b6001600160401b031681525b80515f906115aa906001600160401b039081169085166118c9565b90506115f1818989815181106115c2576115c261238f565b602002602001015187815181106115db576115db61238f565b60200260200101516118dd90919063ffffffff16565b8988815181106116035761160361238f565b6020026020010151868151811061161c5761161c61238f565b602002602001018181525050505050505b6001016114c9565b5050600101611441565b5050949350505050565b60605f6105f7836118f1565b6001600160a01b0381165f90815260018301602052604081205415156105f7565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b818110156117a1576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120611709908361194a565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff169181018290529192504310156117845750506117a1565b611792868260200151611884565b955050508060010190506116d1565b506001600160a01b038086165f90815260a16020908152604080832093881683529290522083906117d1906117f9565b6117db919061250d565b9150509250929050565b5f6105f78383670de0b6b3a76400006119b9565b5f6106ac82670de0b6b3a7640000611a0f565b5f805b825181101561187b5761183b8484838151811061182e5761182e61238f565b6020026020010151610637565b801561186457506118648382815181106118575761185761238f565b6020026020010151611137565b156118735760019150506106ac565b60010161180f565b505f9392505050565b5f6105f761189b836001600160401b03861661252c565b600f0b611a47565b5f825f0182815481106118b8576118b861238f565b905f5260205f200154905092915050565b5f6105f783670de0b6b3a764000084611ab7565b5f6105f78383670de0b6b3a7640000611ab7565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561193e57602002820191905f5260205f20905b81548152602001906001019080831161192a575b50505050509050919050565b5f5f61196c61195884611b9c565b85546119679190600f0b61256b565b611c05565b8454909150600160801b9004600f90810b9082900b1261199f57604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b82545f90816119ca86868385611c6e565b90508015611a05576119ee866119e1600184612592565b5f91825260209091200190565b5464010000000090046001600160e01b031661062d565b5091949350505050565b81545f908015611a3f57611a28846119e1600184612592565b5464010000000090046001600160e01b03166106a8565b509092915050565b5f6001600160401b03821115611ab35760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084015b60405180910390fd5b5090565b5f80805f19858709858702925082811083820303915050805f03611aee57838281611ae457611ae46125a5565b04925050506105f7565b808411611b355760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401611aaa565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f6001600160ff1b03821115611ab35760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401611aaa565b80600f81900b8114611c695760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401611aaa565b919050565b5f5b818310156107c1575f611c838484611cc1565b5f8781526020902090915063ffffffff86169082015463ffffffff161115611cad57809250611cbb565b611cb88160016125b9565b93505b50611c70565b5f611ccf60028484186125cc565b6105f7908484166125b9565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611d1757611d17611cdb565b604052919050565b6001600160a01b0381168114611d33575f5ffd5b50565b803563ffffffff81168114611c69575f5ffd5b5f60408284031215611d59575f5ffd5b604080519081016001600160401b0381118282101715611d7b57611d7b611cdb565b6040529050808235611d8c81611d1f565b8152611d9a60208401611d36565b60208201525092915050565b5f60408284031215611db6575f5ffd5b6105f78383611d49565b5f5f5f60808486031215611dd2575f5ffd5b8335611ddd81611d1f565b9250611dec8560208601611d49565b91506060840135611dfc81611d1f565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff1690820152606081016106ac565b5f5f60608385031215611e4b575f5ffd5b8235611e5681611d1f565b9150611e658460208501611d49565b90509250929050565b5f60208284031215611e7e575f5ffd5b81356105f781611d1f565b5f8151808452602084019350602083015f5b82811015611ed457815180516001600160a01b0316875260209081015163ffffffff168188015260409096019590910190600101611e9b565b5093949350505050565b602081525f6105f76020830184611e89565b5f6001600160401b03821115611f0857611f08611cdb565b5060051b60200190565b5f82601f830112611f21575f5ffd5b8135611f34611f2f82611ef0565b611cef565b8082825260208201915060208360051b860101925085831115611f55575f5ffd5b602085015b83811015611f7b578035611f6d81611d1f565b835260209283019201611f5a565b5095945050505050565b5f5f5f60808486031215611f97575f5ffd5b611fa18585611d49565b925060408401356001600160401b03811115611fbb575f5ffd5b611fc786828701611f12565b92505060608401356001600160401b03811115611fe2575f5ffd5b611fee86828701611f12565b9150509250925092565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561207857868503603f19018452815180518087526020918201918701905f5b8181101561205f578351835260209384019390920191600101612041565b509096505050602093840193919091019060010161201e565b50929695505050505050565b5f5f5f5f60a08587031215612097575f5ffd5b6120a18686611d49565b935060408501356001600160401b038111156120bb575f5ffd5b6120c787828801611f12565b93505060608501356001600160401b038111156120e2575f5ffd5b6120ee87828801611f12565b9250506120fd60808601611d36565b905092959194509250565b5f5f60408385031215612119575f5ffd5b823561212481611d1f565b9150602083013561213481611d1f565b809150509250929050565b5f8151808452602084019350602083015f5b82811015611ed45761218a86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101612151565b604081525f6121b26040830185611e89565b8281036020840152610c25818561213f565b5f8151808452602084019350602083015f5b82811015611ed45781516001600160a01b03168652602095860195909101906001016121d6565b602081525f6105f760208301846121c4565b5f5f60408385031215612220575f5ffd5b82356001600160401b03811115612235575f5ffd5b61224185828601611f12565b925050602083013561213481611d1f565b602080825282518282018190525f918401906040840190835b818110156122925783516001600160401b031683526020938401939092019160010161226b565b509095945050505050565b5f5f604083850312156122ae575f5ffd5b82356122b981611d1f565b915060208301356001600160401b038111156122d3575f5ffd5b6117db85828601611f12565b5f5f5f608084860312156122f1575f5ffd5b83356001600160401b03811115612306575f5ffd5b61231286828701611f12565b935050611dec8560208601611d49565b602081525f6105f7602083018461213f565b5f5f5f60608486031215612346575f5ffd5b833561235181611d1f565b925060208401356001600160401b0381111561236b575f5ffd5b61237786828701611f12565b92505061238660408501611d36565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b805160208083015191908110156123c3575f198160200360031b1b821691505b50919050565b604081525f6123db60408301856121c4565b8281036020840152610c2581856121c4565b5f602082840312156123fd575f5ffd5b81516001600160401b03811115612412575f5ffd5b8201601f81018413612422575f5ffd5b8051612430611f2f82611ef0565b8082825260208201915060208360051b850101925086831115612451575f5ffd5b602084015b838110156124ee5780516001600160401b03811115612473575f5ffd5b8501603f81018913612483575f5ffd5b6020810151612494611f2f82611ef0565b808282526020820191506020808460051b8601010192508b8311156124b7575f5ffd5b6040840193505b828410156124d95783518252602093840193909101906124be565b86525050602093840193919091019050612456565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0382811682821603908111156106ac576106ac6124f9565b600f81810b9083900b016f7fffffffffffffffffffffffffffffff81136f7fffffffffffffffffffffffffffffff19821217156106ac576106ac6124f9565b8082018281125f83128015821682158216171561258a5761258a6124f9565b505092915050565b818103818111156106ac576106ac6124f9565b634e487b7160e01b5f52601260045260245ffd5b808201808211156106ac576106ac6124f9565b5f826125e657634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a58a72c3a97e44c4d5be26f7a6b6d441e019f58b37b1d45cb9b6f916dc89b4ff64736f6c634300081e0033", +} + +// AllocationManagerViewABI is the input ABI used to generate the binding from. +// Deprecated: Use AllocationManagerViewMetaData.ABI instead. +var AllocationManagerViewABI = AllocationManagerViewMetaData.ABI + +// AllocationManagerViewBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use AllocationManagerViewMetaData.Bin instead. +var AllocationManagerViewBin = AllocationManagerViewMetaData.Bin + +// DeployAllocationManagerView deploys a new Ethereum contract, binding an instance of AllocationManagerView to it. +func DeployAllocationManagerView(auth *bind.TransactOpts, backend bind.ContractBackend, _delegation common.Address, _eigenStrategy common.Address, _DEALLOCATION_DELAY uint32, _ALLOCATION_CONFIGURATION_DELAY uint32) (common.Address, *types.Transaction, *AllocationManagerView, error) { + parsed, err := AllocationManagerViewMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(AllocationManagerViewBin), backend, _delegation, _eigenStrategy, _DEALLOCATION_DELAY, _ALLOCATION_CONFIGURATION_DELAY) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &AllocationManagerView{AllocationManagerViewCaller: AllocationManagerViewCaller{contract: contract}, AllocationManagerViewTransactor: AllocationManagerViewTransactor{contract: contract}, AllocationManagerViewFilterer: AllocationManagerViewFilterer{contract: contract}}, nil +} + +// AllocationManagerView is an auto generated Go binding around an Ethereum contract. +type AllocationManagerView struct { + AllocationManagerViewCaller // Read-only binding to the contract + AllocationManagerViewTransactor // Write-only binding to the contract + AllocationManagerViewFilterer // Log filterer for contract events +} + +// AllocationManagerViewCaller is an auto generated read-only Go binding around an Ethereum contract. +type AllocationManagerViewCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AllocationManagerViewTransactor is an auto generated write-only Go binding around an Ethereum contract. +type AllocationManagerViewTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AllocationManagerViewFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type AllocationManagerViewFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// AllocationManagerViewSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type AllocationManagerViewSession struct { + Contract *AllocationManagerView // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AllocationManagerViewCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type AllocationManagerViewCallerSession struct { + Contract *AllocationManagerViewCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// AllocationManagerViewTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type AllocationManagerViewTransactorSession struct { + Contract *AllocationManagerViewTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// AllocationManagerViewRaw is an auto generated low-level Go binding around an Ethereum contract. +type AllocationManagerViewRaw struct { + Contract *AllocationManagerView // Generic contract binding to access the raw methods on +} + +// AllocationManagerViewCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type AllocationManagerViewCallerRaw struct { + Contract *AllocationManagerViewCaller // Generic read-only contract binding to access the raw methods on +} + +// AllocationManagerViewTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type AllocationManagerViewTransactorRaw struct { + Contract *AllocationManagerViewTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewAllocationManagerView creates a new instance of AllocationManagerView, bound to a specific deployed contract. +func NewAllocationManagerView(address common.Address, backend bind.ContractBackend) (*AllocationManagerView, error) { + contract, err := bindAllocationManagerView(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &AllocationManagerView{AllocationManagerViewCaller: AllocationManagerViewCaller{contract: contract}, AllocationManagerViewTransactor: AllocationManagerViewTransactor{contract: contract}, AllocationManagerViewFilterer: AllocationManagerViewFilterer{contract: contract}}, nil +} + +// NewAllocationManagerViewCaller creates a new read-only instance of AllocationManagerView, bound to a specific deployed contract. +func NewAllocationManagerViewCaller(address common.Address, caller bind.ContractCaller) (*AllocationManagerViewCaller, error) { + contract, err := bindAllocationManagerView(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &AllocationManagerViewCaller{contract: contract}, nil +} + +// NewAllocationManagerViewTransactor creates a new write-only instance of AllocationManagerView, bound to a specific deployed contract. +func NewAllocationManagerViewTransactor(address common.Address, transactor bind.ContractTransactor) (*AllocationManagerViewTransactor, error) { + contract, err := bindAllocationManagerView(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &AllocationManagerViewTransactor{contract: contract}, nil +} + +// NewAllocationManagerViewFilterer creates a new log filterer instance of AllocationManagerView, bound to a specific deployed contract. +func NewAllocationManagerViewFilterer(address common.Address, filterer bind.ContractFilterer) (*AllocationManagerViewFilterer, error) { + contract, err := bindAllocationManagerView(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &AllocationManagerViewFilterer{contract: contract}, nil +} + +// bindAllocationManagerView binds a generic wrapper to an already deployed contract. +func bindAllocationManagerView(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := AllocationManagerViewMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AllocationManagerView *AllocationManagerViewRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AllocationManagerView.Contract.AllocationManagerViewCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AllocationManagerView *AllocationManagerViewRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AllocationManagerView.Contract.AllocationManagerViewTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AllocationManagerView *AllocationManagerViewRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AllocationManagerView.Contract.AllocationManagerViewTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_AllocationManagerView *AllocationManagerViewCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _AllocationManagerView.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_AllocationManagerView *AllocationManagerViewTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _AllocationManagerView.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_AllocationManagerView *AllocationManagerViewTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _AllocationManagerView.Contract.contract.Transact(opts, method, params...) +} + +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewCaller) ALLOCATIONCONFIGURATIONDELAY(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "ALLOCATION_CONFIGURATION_DELAY") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewSession) ALLOCATIONCONFIGURATIONDELAY() (uint32, error) { + return _AllocationManagerView.Contract.ALLOCATIONCONFIGURATIONDELAY(&_AllocationManagerView.CallOpts) +} + +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewCallerSession) ALLOCATIONCONFIGURATIONDELAY() (uint32, error) { + return _AllocationManagerView.Contract.ALLOCATIONCONFIGURATIONDELAY(&_AllocationManagerView.CallOpts) +} + +// DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. +// +// Solidity: function DEALLOCATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewCaller) DEALLOCATIONDELAY(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "DEALLOCATION_DELAY") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. +// +// Solidity: function DEALLOCATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewSession) DEALLOCATIONDELAY() (uint32, error) { + return _AllocationManagerView.Contract.DEALLOCATIONDELAY(&_AllocationManagerView.CallOpts) +} + +// DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. +// +// Solidity: function DEALLOCATION_DELAY() view returns(uint32) +func (_AllocationManagerView *AllocationManagerViewCallerSession) DEALLOCATIONDELAY() (uint32, error) { + return _AllocationManagerView.Contract.DEALLOCATIONDELAY(&_AllocationManagerView.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AllocationManagerView *AllocationManagerViewCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AllocationManagerView *AllocationManagerViewSession) Delegation() (common.Address, error) { + return _AllocationManagerView.Contract.Delegation(&_AllocationManagerView.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_AllocationManagerView *AllocationManagerViewCallerSession) Delegation() (common.Address, error) { + return _AllocationManagerView.Contract.Delegation(&_AllocationManagerView.CallOpts) +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerView *AllocationManagerViewCaller) EigenStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "eigenStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerView *AllocationManagerViewSession) EigenStrategy() (common.Address, error) { + return _AllocationManagerView.Contract.EigenStrategy(&_AllocationManagerView.CallOpts) +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_AllocationManagerView *AllocationManagerViewCallerSession) EigenStrategy() (common.Address, error) { + return _AllocationManagerView.Contract.EigenStrategy(&_AllocationManagerView.CallOpts) +} + +// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. +// +// Solidity: function getAVSRegistrar(address avs) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAVSRegistrar(opts *bind.CallOpts, avs common.Address) (common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAVSRegistrar", avs) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. +// +// Solidity: function getAVSRegistrar(address avs) view returns(address) +func (_AllocationManagerView *AllocationManagerViewSession) GetAVSRegistrar(avs common.Address) (common.Address, error) { + return _AllocationManagerView.Contract.GetAVSRegistrar(&_AllocationManagerView.CallOpts, avs) +} + +// GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. +// +// Solidity: function getAVSRegistrar(address avs) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAVSRegistrar(avs common.Address) (common.Address, error) { + return _AllocationManagerView.Contract.GetAVSRegistrar(&_AllocationManagerView.CallOpts, avs) +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocatableMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocatableMagnitude", operator, strategy) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetAllocatableMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetAllocatableMagnitude is a free data retrieval call binding the contract method 0x6cfb4481. +// +// Solidity: function getAllocatableMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocatableMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetAllocatableMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. +// +// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocatedSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocatedSets", operator) + + if err != nil { + return *new([]OperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) + + return out0, err + +} + +// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. +// +// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { + return _AllocationManagerView.Contract.GetAllocatedSets(&_AllocationManagerView.CallOpts, operator) +} + +// GetAllocatedSets is a free data retrieval call binding the contract method 0x15fe5028. +// +// Solidity: function getAllocatedSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocatedSets(operator common.Address) ([]OperatorSet, error) { + return _AllocationManagerView.Contract.GetAllocatedSets(&_AllocationManagerView.CallOpts, operator) +} + +// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. +// +// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocatedStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocatedStake", operatorSet, operators, strategies) + + if err != nil { + return *new([][]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([][]*big.Int)).(*[][]*big.Int) + + return out0, err + +} + +// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. +// +// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { + return _AllocationManagerView.Contract.GetAllocatedStake(&_AllocationManagerView.CallOpts, operatorSet, operators, strategies) +} + +// GetAllocatedStake is a free data retrieval call binding the contract method 0x2b453a9a. +// +// Solidity: function getAllocatedStake((address,uint32) operatorSet, address[] operators, address[] strategies) view returns(uint256[][]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocatedStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address) ([][]*big.Int, error) { + return _AllocationManagerView.Contract.GetAllocatedStake(&_AllocationManagerView.CallOpts, operatorSet, operators, strategies) +} + +// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. +// +// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocatedStrategies(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocatedStrategies", operator, operatorSet) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. +// +// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetAllocatedStrategies(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// GetAllocatedStrategies is a free data retrieval call binding the contract method 0xc221d8ae. +// +// Solidity: function getAllocatedStrategies(address operator, (address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocatedStrategies(operator common.Address, operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetAllocatedStrategies(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. +// +// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocation(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocation", operator, operatorSet, strategy) + + if err != nil { + return *new(IAllocationManagerTypesAllocation), err + } + + out0 := *abi.ConvertType(out[0], new(IAllocationManagerTypesAllocation)).(*IAllocationManagerTypesAllocation) + + return out0, err + +} + +// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. +// +// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetAllocation(&_AllocationManagerView.CallOpts, operator, operatorSet, strategy) +} + +// GetAllocation is a free data retrieval call binding the contract method 0x10e1b9b8. +// +// Solidity: function getAllocation(address operator, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocation(operator common.Address, operatorSet OperatorSet, strategy common.Address) (IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetAllocation(&_AllocationManagerView.CallOpts, operator, operatorSet, strategy) +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +// Solidity: function getAllocationDelay(address operator) view returns(bool, uint32) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocationDelay(opts *bind.CallOpts, operator common.Address) (bool, uint32, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocationDelay", operator) + + if err != nil { + return *new(bool), *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + out1 := *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return out0, out1, err + +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +// Solidity: function getAllocationDelay(address operator) view returns(bool, uint32) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocationDelay(operator common.Address) (bool, uint32, error) { + return _AllocationManagerView.Contract.GetAllocationDelay(&_AllocationManagerView.CallOpts, operator) +} + +// GetAllocationDelay is a free data retrieval call binding the contract method 0xb9fbaed1. +// +// Solidity: function getAllocationDelay(address operator) view returns(bool, uint32) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocationDelay(operator common.Address) (bool, uint32, error) { + return _AllocationManagerView.Contract.GetAllocationDelay(&_AllocationManagerView.CallOpts, operator) +} + +// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. +// +// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetAllocations(opts *bind.CallOpts, operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getAllocations", operators, operatorSet, strategy) + + if err != nil { + return *new([]IAllocationManagerTypesAllocation), err + } + + out0 := *abi.ConvertType(out[0], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) + + return out0, err + +} + +// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. +// +// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetAllocations(&_AllocationManagerView.CallOpts, operators, operatorSet, strategy) +} + +// GetAllocations is a free data retrieval call binding the contract method 0x8ce64854. +// +// Solidity: function getAllocations(address[] operators, (address,uint32) operatorSet, address strategy) view returns((uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetAllocations(operators []common.Address, operatorSet OperatorSet, strategy common.Address) ([]IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetAllocations(&_AllocationManagerView.CallOpts, operators, operatorSet, strategy) +} + +// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. +// +// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCaller) GetEncumberedMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getEncumberedMagnitude", operator, strategy) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. +// +// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetEncumberedMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetEncumberedMagnitude is a free data retrieval call binding the contract method 0xf605ce08. +// +// Solidity: function getEncumberedMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetEncumberedMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetEncumberedMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. +// +// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMaxMagnitude(opts *bind.CallOpts, operator common.Address, strategy common.Address) (uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMaxMagnitude", operator, strategy) + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. +// +// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetMaxMagnitude is a free data retrieval call binding the contract method 0xa9333ec8. +// +// Solidity: function getMaxMagnitude(address operator, address strategy) view returns(uint64) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMaxMagnitude(operator common.Address, strategy common.Address) (uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitude(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. +// +// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMaxMagnitudes(opts *bind.CallOpts, operators []common.Address, strategy common.Address) ([]uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMaxMagnitudes", operators, strategy) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. +// +// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudes(&_AllocationManagerView.CallOpts, operators, strategy) +} + +// GetMaxMagnitudes is a free data retrieval call binding the contract method 0x4a10ffe5. +// +// Solidity: function getMaxMagnitudes(address[] operators, address strategy) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMaxMagnitudes(operators []common.Address, strategy common.Address) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudes(&_AllocationManagerView.CallOpts, operators, strategy) +} + +// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. +// +// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMaxMagnitudes0(opts *bind.CallOpts, operator common.Address, strategies []common.Address) ([]uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMaxMagnitudes0", operator, strategies) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. +// +// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudes0(&_AllocationManagerView.CallOpts, operator, strategies) +} + +// GetMaxMagnitudes0 is a free data retrieval call binding the contract method 0x547afb87. +// +// Solidity: function getMaxMagnitudes(address operator, address[] strategies) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMaxMagnitudes0(operator common.Address, strategies []common.Address) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudes0(&_AllocationManagerView.CallOpts, operator, strategies) +} + +// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. +// +// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMaxMagnitudesAtBlock(opts *bind.CallOpts, operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMaxMagnitudesAtBlock", operator, strategies, blockNumber) + + if err != nil { + return *new([]uint64), err + } + + out0 := *abi.ConvertType(out[0], new([]uint64)).(*[]uint64) + + return out0, err + +} + +// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. +// +// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudesAtBlock(&_AllocationManagerView.CallOpts, operator, strategies, blockNumber) +} + +// GetMaxMagnitudesAtBlock is a free data retrieval call binding the contract method 0x94d7d00c. +// +// Solidity: function getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns(uint64[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMaxMagnitudesAtBlock(operator common.Address, strategies []common.Address, blockNumber uint32) ([]uint64, error) { + return _AllocationManagerView.Contract.GetMaxMagnitudesAtBlock(&_AllocationManagerView.CallOpts, operator, strategies, blockNumber) +} + +// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. +// +// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMemberCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMemberCount", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. +// +// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { + return _AllocationManagerView.Contract.GetMemberCount(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetMemberCount is a free data retrieval call binding the contract method 0xb2447af7. +// +// Solidity: function getMemberCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMemberCount(operatorSet OperatorSet) (*big.Int, error) { + return _AllocationManagerView.Contract.GetMemberCount(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. +// +// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMembers(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMembers", operatorSet) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. +// +// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetMembers(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetMembers is a free data retrieval call binding the contract method 0x6e875dba. +// +// Solidity: function getMembers((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMembers(operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetMembers(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. +// +// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) +func (_AllocationManagerView *AllocationManagerViewCaller) GetMinimumSlashableStake(opts *bind.CallOpts, operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getMinimumSlashableStake", operatorSet, operators, strategies, futureBlock) + + if err != nil { + return *new([][]*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new([][]*big.Int)).(*[][]*big.Int) + + return out0, err + +} + +// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. +// +// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) +func (_AllocationManagerView *AllocationManagerViewSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { + return _AllocationManagerView.Contract.GetMinimumSlashableStake(&_AllocationManagerView.CallOpts, operatorSet, operators, strategies, futureBlock) +} + +// GetMinimumSlashableStake is a free data retrieval call binding the contract method 0x2bab2c4a. +// +// Solidity: function getMinimumSlashableStake((address,uint32) operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns(uint256[][] slashableStake) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetMinimumSlashableStake(operatorSet OperatorSet, operators []common.Address, strategies []common.Address, futureBlock uint32) ([][]*big.Int, error) { + return _AllocationManagerView.Contract.GetMinimumSlashableStake(&_AllocationManagerView.CallOpts, operatorSet, operators, strategies, futureBlock) +} + +// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. +// +// Solidity: function getOperatorSetCount(address avs) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCaller) GetOperatorSetCount(opts *bind.CallOpts, avs common.Address) (*big.Int, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getOperatorSetCount", avs) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. +// +// Solidity: function getOperatorSetCount(address avs) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { + return _AllocationManagerView.Contract.GetOperatorSetCount(&_AllocationManagerView.CallOpts, avs) +} + +// GetOperatorSetCount is a free data retrieval call binding the contract method 0xba1a84e5. +// +// Solidity: function getOperatorSetCount(address avs) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetOperatorSetCount(avs common.Address) (*big.Int, error) { + return _AllocationManagerView.Contract.GetOperatorSetCount(&_AllocationManagerView.CallOpts, avs) +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address, uint32) +func (_AllocationManagerView *AllocationManagerViewCaller) GetPendingSlasher(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, uint32, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getPendingSlasher", operatorSet) + + if err != nil { + return *new(common.Address), *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + out1 := *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return out0, out1, err + +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address, uint32) +func (_AllocationManagerView *AllocationManagerViewSession) GetPendingSlasher(operatorSet OperatorSet) (common.Address, uint32, error) { + return _AllocationManagerView.Contract.GetPendingSlasher(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address, uint32) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetPendingSlasher(operatorSet OperatorSet) (common.Address, uint32, error) { + return _AllocationManagerView.Contract.GetPendingSlasher(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. +// +// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCaller) GetRedistributionRecipient(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getRedistributionRecipient", operatorSet) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. +// +// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewSession) GetRedistributionRecipient(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManagerView.Contract.GetRedistributionRecipient(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. +// +// Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetRedistributionRecipient(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManagerView.Contract.GetRedistributionRecipient(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. +// +// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetRegisteredSets(opts *bind.CallOpts, operator common.Address) ([]OperatorSet, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getRegisteredSets", operator) + + if err != nil { + return *new([]OperatorSet), err + } + + out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) + + return out0, err + +} + +// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. +// +// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { + return _AllocationManagerView.Contract.GetRegisteredSets(&_AllocationManagerView.CallOpts, operator) +} + +// GetRegisteredSets is a free data retrieval call binding the contract method 0x79ae50cd. +// +// Solidity: function getRegisteredSets(address operator) view returns((address,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetRegisteredSets(operator common.Address) ([]OperatorSet, error) { + return _AllocationManagerView.Contract.GetRegisteredSets(&_AllocationManagerView.CallOpts, operator) +} + +// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. +// +// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCaller) GetSlashCount(opts *bind.CallOpts, operatorSet OperatorSet) (*big.Int, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getSlashCount", operatorSet) + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. +// +// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { + return _AllocationManagerView.Contract.GetSlashCount(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetSlashCount is a free data retrieval call binding the contract method 0x4cfd2939. +// +// Solidity: function getSlashCount((address,uint32) operatorSet) view returns(uint256) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetSlashCount(operatorSet OperatorSet) (*big.Int, error) { + return _AllocationManagerView.Contract.GetSlashCount(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCaller) GetSlasher(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getSlasher", operatorSet) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManagerView.Contract.GetSlasher(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _AllocationManagerView.Contract.GetSlasher(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. +// +// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetStrategiesInOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) ([]common.Address, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getStrategiesInOperatorSet", operatorSet) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. +// +// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetStrategiesInOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. +// +// Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetStrategiesInOperatorSet(operatorSet OperatorSet) ([]common.Address, error) { + return _AllocationManagerView.Contract.GetStrategiesInOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. +// +// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCaller) GetStrategyAllocations(opts *bind.CallOpts, operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "getStrategyAllocations", operator, strategy) + + if err != nil { + return *new([]OperatorSet), *new([]IAllocationManagerTypesAllocation), err + } + + out0 := *abi.ConvertType(out[0], new([]OperatorSet)).(*[]OperatorSet) + out1 := *abi.ConvertType(out[1], new([]IAllocationManagerTypesAllocation)).(*[]IAllocationManagerTypesAllocation) + + return out0, out1, err + +} + +// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. +// +// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetStrategyAllocations(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// GetStrategyAllocations is a free data retrieval call binding the contract method 0x40120dab. +// +// Solidity: function getStrategyAllocations(address operator, address strategy) view returns((address,uint32)[], (uint64,int128,uint32)[]) +func (_AllocationManagerView *AllocationManagerViewCallerSession) GetStrategyAllocations(operator common.Address, strategy common.Address) ([]OperatorSet, []IAllocationManagerTypesAllocation, error) { + return _AllocationManagerView.Contract.GetStrategyAllocations(&_AllocationManagerView.CallOpts, operator, strategy) +} + +// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. +// +// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCaller) IsMemberOfOperatorSet(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) (bool, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "isMemberOfOperatorSet", operator, operatorSet) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. +// +// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsMemberOfOperatorSet(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// IsMemberOfOperatorSet is a free data retrieval call binding the contract method 0x670d3ba2. +// +// Solidity: function isMemberOfOperatorSet(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCallerSession) IsMemberOfOperatorSet(operator common.Address, operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsMemberOfOperatorSet(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. +// +// Solidity: function isOperatorRedistributable(address operator) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCaller) IsOperatorRedistributable(opts *bind.CallOpts, operator common.Address) (bool, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "isOperatorRedistributable", operator) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. +// +// Solidity: function isOperatorRedistributable(address operator) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewSession) IsOperatorRedistributable(operator common.Address) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorRedistributable(&_AllocationManagerView.CallOpts, operator) +} + +// IsOperatorRedistributable is a free data retrieval call binding the contract method 0xdc2af692. +// +// Solidity: function isOperatorRedistributable(address operator) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCallerSession) IsOperatorRedistributable(operator common.Address) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorRedistributable(&_AllocationManagerView.CallOpts, operator) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. +// +// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCaller) IsOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) (bool, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "isOperatorSet", operatorSet) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. +// +// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// IsOperatorSet is a free data retrieval call binding the contract method 0x260dc758. +// +// Solidity: function isOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCallerSession) IsOperatorSet(operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. +// +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCaller) IsOperatorSlashable(opts *bind.CallOpts, operator common.Address, operatorSet OperatorSet) (bool, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "isOperatorSlashable", operator, operatorSet) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. +// +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewSession) IsOperatorSlashable(operator common.Address, operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorSlashable(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// IsOperatorSlashable is a free data retrieval call binding the contract method 0x1352c3e6. +// +// Solidity: function isOperatorSlashable(address operator, (address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCallerSession) IsOperatorSlashable(operator common.Address, operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsOperatorSlashable(&_AllocationManagerView.CallOpts, operator, operatorSet) +} + +// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. +// +// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCaller) IsRedistributingOperatorSet(opts *bind.CallOpts, operatorSet OperatorSet) (bool, error) { + var out []interface{} + err := _AllocationManagerView.contract.Call(opts, &out, "isRedistributingOperatorSet", operatorSet) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. +// +// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewSession) IsRedistributingOperatorSet(operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsRedistributingOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// IsRedistributingOperatorSet is a free data retrieval call binding the contract method 0xf231bd08. +// +// Solidity: function isRedistributingOperatorSet((address,uint32) operatorSet) view returns(bool) +func (_AllocationManagerView *AllocationManagerViewCallerSession) IsRedistributingOperatorSet(operatorSet OperatorSet) (bool, error) { + return _AllocationManagerView.Contract.IsRedistributingOperatorSet(&_AllocationManagerView.CallOpts, operatorSet) +} + +// AllocationManagerViewAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the AllocationManagerView contract. +type AllocationManagerViewAVSMetadataURIUpdatedIterator struct { + Event *AllocationManagerViewAVSMetadataURIUpdated // 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 *AllocationManagerViewAVSMetadataURIUpdatedIterator) 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(AllocationManagerViewAVSMetadataURIUpdated) + 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(AllocationManagerViewAVSMetadataURIUpdated) + 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 *AllocationManagerViewAVSMetadataURIUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewAVSMetadataURIUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewAVSMetadataURIUpdated represents a AVSMetadataURIUpdated event raised by the AllocationManagerView contract. +type AllocationManagerViewAVSMetadataURIUpdated struct { + Avs common.Address + MetadataURI string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSMetadataURIUpdated is a free log retrieval operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterAVSMetadataURIUpdated(opts *bind.FilterOpts, avs []common.Address) (*AllocationManagerViewAVSMetadataURIUpdatedIterator, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "AVSMetadataURIUpdated", avsRule) + if err != nil { + return nil, err + } + return &AllocationManagerViewAVSMetadataURIUpdatedIterator{contract: _AllocationManagerView.contract, event: "AVSMetadataURIUpdated", logs: logs, sub: sub}, nil +} + +// WatchAVSMetadataURIUpdated is a free log subscription operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchAVSMetadataURIUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewAVSMetadataURIUpdated, avs []common.Address) (event.Subscription, error) { + + var avsRule []interface{} + for _, avsItem := range avs { + avsRule = append(avsRule, avsItem) + } + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "AVSMetadataURIUpdated", avsRule) + 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(AllocationManagerViewAVSMetadataURIUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "AVSMetadataURIUpdated", 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 +} + +// ParseAVSMetadataURIUpdated is a log parse operation binding the contract event 0xa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c943713. +// +// Solidity: event AVSMetadataURIUpdated(address indexed avs, string metadataURI) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseAVSMetadataURIUpdated(log types.Log) (*AllocationManagerViewAVSMetadataURIUpdated, error) { + event := new(AllocationManagerViewAVSMetadataURIUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "AVSMetadataURIUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewAVSRegistrarSetIterator is returned from FilterAVSRegistrarSet and is used to iterate over the raw logs and unpacked data for AVSRegistrarSet events raised by the AllocationManagerView contract. +type AllocationManagerViewAVSRegistrarSetIterator struct { + Event *AllocationManagerViewAVSRegistrarSet // 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 *AllocationManagerViewAVSRegistrarSetIterator) 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(AllocationManagerViewAVSRegistrarSet) + 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(AllocationManagerViewAVSRegistrarSet) + 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 *AllocationManagerViewAVSRegistrarSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewAVSRegistrarSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewAVSRegistrarSet represents a AVSRegistrarSet event raised by the AllocationManagerView contract. +type AllocationManagerViewAVSRegistrarSet struct { + Avs common.Address + Registrar common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAVSRegistrarSet is a free log retrieval operation binding the contract event 0x2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf85. +// +// Solidity: event AVSRegistrarSet(address avs, address registrar) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterAVSRegistrarSet(opts *bind.FilterOpts) (*AllocationManagerViewAVSRegistrarSetIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "AVSRegistrarSet") + if err != nil { + return nil, err + } + return &AllocationManagerViewAVSRegistrarSetIterator{contract: _AllocationManagerView.contract, event: "AVSRegistrarSet", logs: logs, sub: sub}, nil +} + +// WatchAVSRegistrarSet is a free log subscription operation binding the contract event 0x2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf85. +// +// Solidity: event AVSRegistrarSet(address avs, address registrar) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchAVSRegistrarSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewAVSRegistrarSet) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "AVSRegistrarSet") + 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(AllocationManagerViewAVSRegistrarSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "AVSRegistrarSet", 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 +} + +// ParseAVSRegistrarSet is a log parse operation binding the contract event 0x2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf85. +// +// Solidity: event AVSRegistrarSet(address avs, address registrar) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseAVSRegistrarSet(log types.Log) (*AllocationManagerViewAVSRegistrarSet, error) { + event := new(AllocationManagerViewAVSRegistrarSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "AVSRegistrarSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewAllocationDelaySetIterator is returned from FilterAllocationDelaySet and is used to iterate over the raw logs and unpacked data for AllocationDelaySet events raised by the AllocationManagerView contract. +type AllocationManagerViewAllocationDelaySetIterator struct { + Event *AllocationManagerViewAllocationDelaySet // 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 *AllocationManagerViewAllocationDelaySetIterator) 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(AllocationManagerViewAllocationDelaySet) + 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(AllocationManagerViewAllocationDelaySet) + 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 *AllocationManagerViewAllocationDelaySetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewAllocationDelaySetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewAllocationDelaySet represents a AllocationDelaySet event raised by the AllocationManagerView contract. +type AllocationManagerViewAllocationDelaySet struct { + Operator common.Address + Delay uint32 + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAllocationDelaySet is a free log retrieval operation binding the contract event 0x4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db. +// +// Solidity: event AllocationDelaySet(address operator, uint32 delay, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterAllocationDelaySet(opts *bind.FilterOpts) (*AllocationManagerViewAllocationDelaySetIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "AllocationDelaySet") + if err != nil { + return nil, err + } + return &AllocationManagerViewAllocationDelaySetIterator{contract: _AllocationManagerView.contract, event: "AllocationDelaySet", logs: logs, sub: sub}, nil +} + +// WatchAllocationDelaySet is a free log subscription operation binding the contract event 0x4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db. +// +// Solidity: event AllocationDelaySet(address operator, uint32 delay, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchAllocationDelaySet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewAllocationDelaySet) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "AllocationDelaySet") + 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(AllocationManagerViewAllocationDelaySet) + if err := _AllocationManagerView.contract.UnpackLog(event, "AllocationDelaySet", 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 +} + +// ParseAllocationDelaySet is a log parse operation binding the contract event 0x4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db. +// +// Solidity: event AllocationDelaySet(address operator, uint32 delay, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseAllocationDelaySet(log types.Log) (*AllocationManagerViewAllocationDelaySet, error) { + event := new(AllocationManagerViewAllocationDelaySet) + if err := _AllocationManagerView.contract.UnpackLog(event, "AllocationDelaySet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewAllocationUpdatedIterator is returned from FilterAllocationUpdated and is used to iterate over the raw logs and unpacked data for AllocationUpdated events raised by the AllocationManagerView contract. +type AllocationManagerViewAllocationUpdatedIterator struct { + Event *AllocationManagerViewAllocationUpdated // 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 *AllocationManagerViewAllocationUpdatedIterator) 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(AllocationManagerViewAllocationUpdated) + 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(AllocationManagerViewAllocationUpdated) + 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 *AllocationManagerViewAllocationUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewAllocationUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewAllocationUpdated represents a AllocationUpdated event raised by the AllocationManagerView contract. +type AllocationManagerViewAllocationUpdated struct { + Operator common.Address + OperatorSet OperatorSet + Strategy common.Address + Magnitude uint64 + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterAllocationUpdated is a free log retrieval operation binding the contract event 0x1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd. +// +// Solidity: event AllocationUpdated(address operator, (address,uint32) operatorSet, address strategy, uint64 magnitude, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterAllocationUpdated(opts *bind.FilterOpts) (*AllocationManagerViewAllocationUpdatedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "AllocationUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerViewAllocationUpdatedIterator{contract: _AllocationManagerView.contract, event: "AllocationUpdated", logs: logs, sub: sub}, nil +} + +// WatchAllocationUpdated is a free log subscription operation binding the contract event 0x1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd. +// +// Solidity: event AllocationUpdated(address operator, (address,uint32) operatorSet, address strategy, uint64 magnitude, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchAllocationUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewAllocationUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "AllocationUpdated") + 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(AllocationManagerViewAllocationUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "AllocationUpdated", 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 +} + +// ParseAllocationUpdated is a log parse operation binding the contract event 0x1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd. +// +// Solidity: event AllocationUpdated(address operator, (address,uint32) operatorSet, address strategy, uint64 magnitude, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseAllocationUpdated(log types.Log) (*AllocationManagerViewAllocationUpdated, error) { + event := new(AllocationManagerViewAllocationUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "AllocationUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewEncumberedMagnitudeUpdatedIterator is returned from FilterEncumberedMagnitudeUpdated and is used to iterate over the raw logs and unpacked data for EncumberedMagnitudeUpdated events raised by the AllocationManagerView contract. +type AllocationManagerViewEncumberedMagnitudeUpdatedIterator struct { + Event *AllocationManagerViewEncumberedMagnitudeUpdated // 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 *AllocationManagerViewEncumberedMagnitudeUpdatedIterator) 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(AllocationManagerViewEncumberedMagnitudeUpdated) + 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(AllocationManagerViewEncumberedMagnitudeUpdated) + 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 *AllocationManagerViewEncumberedMagnitudeUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewEncumberedMagnitudeUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewEncumberedMagnitudeUpdated represents a EncumberedMagnitudeUpdated event raised by the AllocationManagerView contract. +type AllocationManagerViewEncumberedMagnitudeUpdated struct { + Operator common.Address + Strategy common.Address + EncumberedMagnitude uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterEncumberedMagnitudeUpdated is a free log retrieval operation binding the contract event 0xacf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc55. +// +// Solidity: event EncumberedMagnitudeUpdated(address operator, address strategy, uint64 encumberedMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterEncumberedMagnitudeUpdated(opts *bind.FilterOpts) (*AllocationManagerViewEncumberedMagnitudeUpdatedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "EncumberedMagnitudeUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerViewEncumberedMagnitudeUpdatedIterator{contract: _AllocationManagerView.contract, event: "EncumberedMagnitudeUpdated", logs: logs, sub: sub}, nil +} + +// WatchEncumberedMagnitudeUpdated is a free log subscription operation binding the contract event 0xacf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc55. +// +// Solidity: event EncumberedMagnitudeUpdated(address operator, address strategy, uint64 encumberedMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchEncumberedMagnitudeUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewEncumberedMagnitudeUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "EncumberedMagnitudeUpdated") + 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(AllocationManagerViewEncumberedMagnitudeUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "EncumberedMagnitudeUpdated", 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 +} + +// ParseEncumberedMagnitudeUpdated is a log parse operation binding the contract event 0xacf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc55. +// +// Solidity: event EncumberedMagnitudeUpdated(address operator, address strategy, uint64 encumberedMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseEncumberedMagnitudeUpdated(log types.Log) (*AllocationManagerViewEncumberedMagnitudeUpdated, error) { + event := new(AllocationManagerViewEncumberedMagnitudeUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "EncumberedMagnitudeUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewMaxMagnitudeUpdatedIterator is returned from FilterMaxMagnitudeUpdated and is used to iterate over the raw logs and unpacked data for MaxMagnitudeUpdated events raised by the AllocationManagerView contract. +type AllocationManagerViewMaxMagnitudeUpdatedIterator struct { + Event *AllocationManagerViewMaxMagnitudeUpdated // 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 *AllocationManagerViewMaxMagnitudeUpdatedIterator) 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(AllocationManagerViewMaxMagnitudeUpdated) + 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(AllocationManagerViewMaxMagnitudeUpdated) + 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 *AllocationManagerViewMaxMagnitudeUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewMaxMagnitudeUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewMaxMagnitudeUpdated represents a MaxMagnitudeUpdated event raised by the AllocationManagerView contract. +type AllocationManagerViewMaxMagnitudeUpdated struct { + Operator common.Address + Strategy common.Address + MaxMagnitude uint64 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterMaxMagnitudeUpdated is a free log retrieval operation binding the contract event 0x1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c. +// +// Solidity: event MaxMagnitudeUpdated(address operator, address strategy, uint64 maxMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterMaxMagnitudeUpdated(opts *bind.FilterOpts) (*AllocationManagerViewMaxMagnitudeUpdatedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "MaxMagnitudeUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerViewMaxMagnitudeUpdatedIterator{contract: _AllocationManagerView.contract, event: "MaxMagnitudeUpdated", logs: logs, sub: sub}, nil +} + +// WatchMaxMagnitudeUpdated is a free log subscription operation binding the contract event 0x1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c. +// +// Solidity: event MaxMagnitudeUpdated(address operator, address strategy, uint64 maxMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchMaxMagnitudeUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewMaxMagnitudeUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "MaxMagnitudeUpdated") + 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(AllocationManagerViewMaxMagnitudeUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "MaxMagnitudeUpdated", 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 +} + +// ParseMaxMagnitudeUpdated is a log parse operation binding the contract event 0x1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c. +// +// Solidity: event MaxMagnitudeUpdated(address operator, address strategy, uint64 maxMagnitude) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseMaxMagnitudeUpdated(log types.Log) (*AllocationManagerViewMaxMagnitudeUpdated, error) { + event := new(AllocationManagerViewMaxMagnitudeUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "MaxMagnitudeUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewOperatorAddedToOperatorSetIterator is returned from FilterOperatorAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorAddedToOperatorSet events raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorAddedToOperatorSetIterator struct { + Event *AllocationManagerViewOperatorAddedToOperatorSet // 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 *AllocationManagerViewOperatorAddedToOperatorSetIterator) 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(AllocationManagerViewOperatorAddedToOperatorSet) + 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(AllocationManagerViewOperatorAddedToOperatorSet) + 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 *AllocationManagerViewOperatorAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewOperatorAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewOperatorAddedToOperatorSet represents a OperatorAddedToOperatorSet event raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorAddedToOperatorSet struct { + Operator common.Address + OperatorSet OperatorSet + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorAddedToOperatorSet is a free log retrieval operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterOperatorAddedToOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AllocationManagerViewOperatorAddedToOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AllocationManagerViewOperatorAddedToOperatorSetIterator{contract: _AllocationManagerView.contract, event: "OperatorAddedToOperatorSet", logs: logs, sub: sub}, nil +} + +// WatchOperatorAddedToOperatorSet is a free log subscription operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchOperatorAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewOperatorAddedToOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "OperatorAddedToOperatorSet", operatorRule) + 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(AllocationManagerViewOperatorAddedToOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorAddedToOperatorSet", 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 +} + +// ParseOperatorAddedToOperatorSet is a log parse operation binding the contract event 0x43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e. +// +// Solidity: event OperatorAddedToOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseOperatorAddedToOperatorSet(log types.Log) (*AllocationManagerViewOperatorAddedToOperatorSet, error) { + event := new(AllocationManagerViewOperatorAddedToOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewOperatorRemovedFromOperatorSetIterator is returned from FilterOperatorRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for OperatorRemovedFromOperatorSet events raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorRemovedFromOperatorSetIterator struct { + Event *AllocationManagerViewOperatorRemovedFromOperatorSet // 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 *AllocationManagerViewOperatorRemovedFromOperatorSetIterator) 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(AllocationManagerViewOperatorRemovedFromOperatorSet) + 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(AllocationManagerViewOperatorRemovedFromOperatorSet) + 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 *AllocationManagerViewOperatorRemovedFromOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewOperatorRemovedFromOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewOperatorRemovedFromOperatorSet represents a OperatorRemovedFromOperatorSet event raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorRemovedFromOperatorSet struct { + Operator common.Address + OperatorSet OperatorSet + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterOperatorRemovedFromOperatorSet(opts *bind.FilterOpts, operator []common.Address) (*AllocationManagerViewOperatorRemovedFromOperatorSetIterator, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + if err != nil { + return nil, err + } + return &AllocationManagerViewOperatorRemovedFromOperatorSetIterator{contract: _AllocationManagerView.contract, event: "OperatorRemovedFromOperatorSet", logs: logs, sub: sub}, nil +} + +// WatchOperatorRemovedFromOperatorSet is a free log subscription operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchOperatorRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewOperatorRemovedFromOperatorSet, operator []common.Address) (event.Subscription, error) { + + var operatorRule []interface{} + for _, operatorItem := range operator { + operatorRule = append(operatorRule, operatorItem) + } + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "OperatorRemovedFromOperatorSet", operatorRule) + 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(AllocationManagerViewOperatorRemovedFromOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", 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 +} + +// ParseOperatorRemovedFromOperatorSet is a log parse operation binding the contract event 0xad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe. +// +// Solidity: event OperatorRemovedFromOperatorSet(address indexed operator, (address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseOperatorRemovedFromOperatorSet(log types.Log) (*AllocationManagerViewOperatorRemovedFromOperatorSet, error) { + event := new(AllocationManagerViewOperatorRemovedFromOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewOperatorSetCreatedIterator is returned from FilterOperatorSetCreated and is used to iterate over the raw logs and unpacked data for OperatorSetCreated events raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorSetCreatedIterator struct { + Event *AllocationManagerViewOperatorSetCreated // 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 *AllocationManagerViewOperatorSetCreatedIterator) 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(AllocationManagerViewOperatorSetCreated) + 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(AllocationManagerViewOperatorSetCreated) + 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 *AllocationManagerViewOperatorSetCreatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewOperatorSetCreatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewOperatorSetCreated represents a OperatorSetCreated event raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorSetCreated struct { + OperatorSet OperatorSet + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSetCreated is a free log retrieval operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterOperatorSetCreated(opts *bind.FilterOpts) (*AllocationManagerViewOperatorSetCreatedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "OperatorSetCreated") + if err != nil { + return nil, err + } + return &AllocationManagerViewOperatorSetCreatedIterator{contract: _AllocationManagerView.contract, event: "OperatorSetCreated", logs: logs, sub: sub}, nil +} + +// WatchOperatorSetCreated is a free log subscription operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchOperatorSetCreated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewOperatorSetCreated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "OperatorSetCreated") + 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(AllocationManagerViewOperatorSetCreated) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorSetCreated", 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 +} + +// ParseOperatorSetCreated is a log parse operation binding the contract event 0x31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c. +// +// Solidity: event OperatorSetCreated((address,uint32) operatorSet) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseOperatorSetCreated(log types.Log) (*AllocationManagerViewOperatorSetCreated, error) { + event := new(AllocationManagerViewOperatorSetCreated) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorSetCreated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewOperatorSlashedIterator is returned from FilterOperatorSlashed and is used to iterate over the raw logs and unpacked data for OperatorSlashed events raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorSlashedIterator struct { + Event *AllocationManagerViewOperatorSlashed // 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 *AllocationManagerViewOperatorSlashedIterator) 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(AllocationManagerViewOperatorSlashed) + 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(AllocationManagerViewOperatorSlashed) + 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 *AllocationManagerViewOperatorSlashedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewOperatorSlashedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewOperatorSlashed represents a OperatorSlashed event raised by the AllocationManagerView contract. +type AllocationManagerViewOperatorSlashed struct { + Operator common.Address + OperatorSet OperatorSet + Strategies []common.Address + WadSlashed []*big.Int + Description string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterOperatorSlashed is a free log retrieval operation binding the contract event 0x80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe5. +// +// Solidity: event OperatorSlashed(address operator, (address,uint32) operatorSet, address[] strategies, uint256[] wadSlashed, string description) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterOperatorSlashed(opts *bind.FilterOpts) (*AllocationManagerViewOperatorSlashedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "OperatorSlashed") + if err != nil { + return nil, err + } + return &AllocationManagerViewOperatorSlashedIterator{contract: _AllocationManagerView.contract, event: "OperatorSlashed", logs: logs, sub: sub}, nil +} + +// WatchOperatorSlashed is a free log subscription operation binding the contract event 0x80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe5. +// +// Solidity: event OperatorSlashed(address operator, (address,uint32) operatorSet, address[] strategies, uint256[] wadSlashed, string description) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchOperatorSlashed(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewOperatorSlashed) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "OperatorSlashed") + 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(AllocationManagerViewOperatorSlashed) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorSlashed", 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 +} + +// ParseOperatorSlashed is a log parse operation binding the contract event 0x80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe5. +// +// Solidity: event OperatorSlashed(address operator, (address,uint32) operatorSet, address[] strategies, uint256[] wadSlashed, string description) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseOperatorSlashed(log types.Log) (*AllocationManagerViewOperatorSlashed, error) { + event := new(AllocationManagerViewOperatorSlashed) + if err := _AllocationManagerView.contract.UnpackLog(event, "OperatorSlashed", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewRedistributionAddressSetIterator is returned from FilterRedistributionAddressSet and is used to iterate over the raw logs and unpacked data for RedistributionAddressSet events raised by the AllocationManagerView contract. +type AllocationManagerViewRedistributionAddressSetIterator struct { + Event *AllocationManagerViewRedistributionAddressSet // 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 *AllocationManagerViewRedistributionAddressSetIterator) 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(AllocationManagerViewRedistributionAddressSet) + 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(AllocationManagerViewRedistributionAddressSet) + 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 *AllocationManagerViewRedistributionAddressSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewRedistributionAddressSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewRedistributionAddressSet represents a RedistributionAddressSet event raised by the AllocationManagerView contract. +type AllocationManagerViewRedistributionAddressSet struct { + OperatorSet OperatorSet + RedistributionRecipient common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRedistributionAddressSet is a free log retrieval operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterRedistributionAddressSet(opts *bind.FilterOpts) (*AllocationManagerViewRedistributionAddressSetIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "RedistributionAddressSet") + if err != nil { + return nil, err + } + return &AllocationManagerViewRedistributionAddressSetIterator{contract: _AllocationManagerView.contract, event: "RedistributionAddressSet", logs: logs, sub: sub}, nil +} + +// WatchRedistributionAddressSet is a free log subscription operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchRedistributionAddressSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewRedistributionAddressSet) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "RedistributionAddressSet") + 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(AllocationManagerViewRedistributionAddressSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "RedistributionAddressSet", 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 +} + +// ParseRedistributionAddressSet is a log parse operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseRedistributionAddressSet(log types.Log) (*AllocationManagerViewRedistributionAddressSet, error) { + event := new(AllocationManagerViewRedistributionAddressSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "RedistributionAddressSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewSlasherMigratedIterator is returned from FilterSlasherMigrated and is used to iterate over the raw logs and unpacked data for SlasherMigrated events raised by the AllocationManagerView contract. +type AllocationManagerViewSlasherMigratedIterator struct { + Event *AllocationManagerViewSlasherMigrated // 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 *AllocationManagerViewSlasherMigratedIterator) 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(AllocationManagerViewSlasherMigrated) + 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(AllocationManagerViewSlasherMigrated) + 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 *AllocationManagerViewSlasherMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewSlasherMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewSlasherMigrated represents a SlasherMigrated event raised by the AllocationManagerView contract. +type AllocationManagerViewSlasherMigrated struct { + OperatorSet OperatorSet + Slasher common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherMigrated is a free log retrieval operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterSlasherMigrated(opts *bind.FilterOpts) (*AllocationManagerViewSlasherMigratedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "SlasherMigrated") + if err != nil { + return nil, err + } + return &AllocationManagerViewSlasherMigratedIterator{contract: _AllocationManagerView.contract, event: "SlasherMigrated", logs: logs, sub: sub}, nil +} + +// WatchSlasherMigrated is a free log subscription operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchSlasherMigrated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewSlasherMigrated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "SlasherMigrated") + 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(AllocationManagerViewSlasherMigrated) + if err := _AllocationManagerView.contract.UnpackLog(event, "SlasherMigrated", 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 +} + +// ParseSlasherMigrated is a log parse operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseSlasherMigrated(log types.Log) (*AllocationManagerViewSlasherMigrated, error) { + event := new(AllocationManagerViewSlasherMigrated) + if err := _AllocationManagerView.contract.UnpackLog(event, "SlasherMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewSlasherUpdatedIterator is returned from FilterSlasherUpdated and is used to iterate over the raw logs and unpacked data for SlasherUpdated events raised by the AllocationManagerView contract. +type AllocationManagerViewSlasherUpdatedIterator struct { + Event *AllocationManagerViewSlasherUpdated // 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 *AllocationManagerViewSlasherUpdatedIterator) 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(AllocationManagerViewSlasherUpdated) + 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(AllocationManagerViewSlasherUpdated) + 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 *AllocationManagerViewSlasherUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewSlasherUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewSlasherUpdated represents a SlasherUpdated event raised by the AllocationManagerView contract. +type AllocationManagerViewSlasherUpdated struct { + OperatorSet OperatorSet + Slasher common.Address + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherUpdated is a free log retrieval operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterSlasherUpdated(opts *bind.FilterOpts) (*AllocationManagerViewSlasherUpdatedIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "SlasherUpdated") + if err != nil { + return nil, err + } + return &AllocationManagerViewSlasherUpdatedIterator{contract: _AllocationManagerView.contract, event: "SlasherUpdated", logs: logs, sub: sub}, nil +} + +// WatchSlasherUpdated is a free log subscription operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchSlasherUpdated(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewSlasherUpdated) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "SlasherUpdated") + 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(AllocationManagerViewSlasherUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "SlasherUpdated", 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 +} + +// ParseSlasherUpdated is a log parse operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseSlasherUpdated(log types.Log) (*AllocationManagerViewSlasherUpdated, error) { + event := new(AllocationManagerViewSlasherUpdated) + if err := _AllocationManagerView.contract.UnpackLog(event, "SlasherUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewStrategyAddedToOperatorSetIterator is returned from FilterStrategyAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyAddedToOperatorSet events raised by the AllocationManagerView contract. +type AllocationManagerViewStrategyAddedToOperatorSetIterator struct { + Event *AllocationManagerViewStrategyAddedToOperatorSet // 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 *AllocationManagerViewStrategyAddedToOperatorSetIterator) 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(AllocationManagerViewStrategyAddedToOperatorSet) + 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(AllocationManagerViewStrategyAddedToOperatorSet) + 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 *AllocationManagerViewStrategyAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewStrategyAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewStrategyAddedToOperatorSet represents a StrategyAddedToOperatorSet event raised by the AllocationManagerView contract. +type AllocationManagerViewStrategyAddedToOperatorSet struct { + OperatorSet OperatorSet + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyAddedToOperatorSet is a free log retrieval operation binding the contract event 0x7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b. +// +// Solidity: event StrategyAddedToOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterStrategyAddedToOperatorSet(opts *bind.FilterOpts) (*AllocationManagerViewStrategyAddedToOperatorSetIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "StrategyAddedToOperatorSet") + if err != nil { + return nil, err + } + return &AllocationManagerViewStrategyAddedToOperatorSetIterator{contract: _AllocationManagerView.contract, event: "StrategyAddedToOperatorSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyAddedToOperatorSet is a free log subscription operation binding the contract event 0x7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b. +// +// Solidity: event StrategyAddedToOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchStrategyAddedToOperatorSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewStrategyAddedToOperatorSet) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "StrategyAddedToOperatorSet") + 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(AllocationManagerViewStrategyAddedToOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "StrategyAddedToOperatorSet", 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 +} + +// ParseStrategyAddedToOperatorSet is a log parse operation binding the contract event 0x7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b. +// +// Solidity: event StrategyAddedToOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseStrategyAddedToOperatorSet(log types.Log) (*AllocationManagerViewStrategyAddedToOperatorSet, error) { + event := new(AllocationManagerViewStrategyAddedToOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "StrategyAddedToOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// AllocationManagerViewStrategyRemovedFromOperatorSetIterator is returned from FilterStrategyRemovedFromOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyRemovedFromOperatorSet events raised by the AllocationManagerView contract. +type AllocationManagerViewStrategyRemovedFromOperatorSetIterator struct { + Event *AllocationManagerViewStrategyRemovedFromOperatorSet // 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 *AllocationManagerViewStrategyRemovedFromOperatorSetIterator) 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(AllocationManagerViewStrategyRemovedFromOperatorSet) + 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(AllocationManagerViewStrategyRemovedFromOperatorSet) + 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 *AllocationManagerViewStrategyRemovedFromOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *AllocationManagerViewStrategyRemovedFromOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// AllocationManagerViewStrategyRemovedFromOperatorSet represents a StrategyRemovedFromOperatorSet event raised by the AllocationManagerView contract. +type AllocationManagerViewStrategyRemovedFromOperatorSet struct { + OperatorSet OperatorSet + Strategy common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterStrategyRemovedFromOperatorSet is a free log retrieval operation binding the contract event 0x7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee. +// +// Solidity: event StrategyRemovedFromOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) FilterStrategyRemovedFromOperatorSet(opts *bind.FilterOpts) (*AllocationManagerViewStrategyRemovedFromOperatorSetIterator, error) { + + logs, sub, err := _AllocationManagerView.contract.FilterLogs(opts, "StrategyRemovedFromOperatorSet") + if err != nil { + return nil, err + } + return &AllocationManagerViewStrategyRemovedFromOperatorSetIterator{contract: _AllocationManagerView.contract, event: "StrategyRemovedFromOperatorSet", logs: logs, sub: sub}, nil +} + +// WatchStrategyRemovedFromOperatorSet is a free log subscription operation binding the contract event 0x7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee. +// +// Solidity: event StrategyRemovedFromOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) WatchStrategyRemovedFromOperatorSet(opts *bind.WatchOpts, sink chan<- *AllocationManagerViewStrategyRemovedFromOperatorSet) (event.Subscription, error) { + + logs, sub, err := _AllocationManagerView.contract.WatchLogs(opts, "StrategyRemovedFromOperatorSet") + 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(AllocationManagerViewStrategyRemovedFromOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "StrategyRemovedFromOperatorSet", 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 +} + +// ParseStrategyRemovedFromOperatorSet is a log parse operation binding the contract event 0x7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee. +// +// Solidity: event StrategyRemovedFromOperatorSet((address,uint32) operatorSet, address strategy) +func (_AllocationManagerView *AllocationManagerViewFilterer) ParseStrategyRemovedFromOperatorSet(log types.Log) (*AllocationManagerViewStrategyRemovedFromOperatorSet, error) { + event := new(AllocationManagerViewStrategyRemovedFromOperatorSet) + if err := _AllocationManagerView.contract.UnpackLog(event, "StrategyRemovedFromOperatorSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/BN254/binding.go b/pkg/bindings/BN254/binding.go index 5897b13371..e574ea4e30 100644 --- a/pkg/bindings/BN254/binding.go +++ b/pkg/bindings/BN254/binding.go @@ -32,7 +32,7 @@ var ( // BN254MetaData contains all meta data concerning the BN254 contract. var BN254MetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ScalarTooLarge\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220d084bedd451fadde14a6590fa5fb3e40f2250b7f49f9228d15f27cae51d34f7464736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220525873b9d5bfb80a423d39b32b26f3621f3cec7aea4f8ba5d032d25caf80a19c64736f6c634300081e0033", } // BN254ABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/BN254CertificateVerifier/binding.go b/pkg/bindings/BN254CertificateVerifier/binding.go index fbb6f4e276..0a1fb12986 100644 --- a/pkg/bindings/BN254CertificateVerifier/binding.go +++ b/pkg/bindings/BN254CertificateVerifier/binding.go @@ -85,8 +85,8 @@ type OperatorSet struct { // BN254CertificateVerifierMetaData contains all meta data concerning the BN254CertificateVerifier contract. var BN254CertificateVerifierMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_operatorTableUpdater\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_INFO_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_TABLE_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCertificateDigest\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorInfoLeaf\",\"inputs\":[{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableLeaf\",\"inputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getNonsignerOperatorInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isNonsignerCached\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isReferenceTimestampSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorTableUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"trySignatureVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"aggPubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"signatureValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"totalSignedStakeWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonSignerIndicesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", - Bin: "0x60c060405234801561000f575f5ffd5b50604051612e71380380612e7183398101604081905261002e9161016a565b6001600160a01b0382166080528061004581610058565b60a0525061005161009e565b5050610294565b5f5f829050601f8151111561008b578260405163305a27a960e01b81526004016100829190610239565b60405180910390fd5b80516100968261026e565b179392505050565b5f54610100900460ff16156101055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610082565b5f5460ff90811614610154575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017b575f5ffd5b82516001600160a01b0381168114610191575f5ffd5b60208401519092506001600160401b038111156101ac575f5ffd5b8301601f810185136101bc575f5ffd5b80516001600160401b038111156101d5576101d5610156565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020357610203610156565b60405281815282820160200187101561021a575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561028e575f198160200360031b1b821691505b50919050565b60805160a051612bae6102c35f395f6106d501525f81816102a6015281816108200152610ff50152612bae5ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c80635ddb9b5b116100b4578063848189201161007957806384818920146102f3578063a2c902f514610306578063a2f2e24d1461030e578063cd83a72b14610321578063dd2ae1b914610334578063eb39e68f14610347575f5ffd5b80635ddb9b5b146102515780636141879e146102795780636738c40b1461028c57806368d6e081146102a15780637d1d1f5b146102e0575f5ffd5b806323c2a3cb116100fa57806323c2a3cb146101e357806326af6a3c146101f6578063538a37901461021657806354fd4d50146102295780635be872741461023e575f5ffd5b8063017d797414610136578063080b71501461015e578063121409ea1461017e57806318467434146101985780631a18746c146101b9575b5f5ffd5b610149610144366004612461565b610367565b60405190151581526020015b60405180910390f35b61017161016c36600461253c565b6104f8565b6040516101559190612587565b610186608e81565b60405160ff9091168152602001610155565b6101ab6101a63660046125be565b61050d565b604051908152602001610155565b6101cc6101c73660046125e6565b610570565b604080519215158352901515602083015201610155565b6101ab6101f1366004612634565b610591565b610209610204366004612666565b6105c7565b60405161015591906126db565b6101ab610224366004612708565b61067f565b6102316106ce565b6040516101559190612739565b61014961024c366004612666565b6106fe565b61026461025f36600461276e565b6107c9565b60405163ffffffff9091168152602001610155565b61026461028736600461276e565b6107ef565b61029f61029a36600461279e565b610815565b005b6102c87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610155565b6101716102ee366004612634565b6109fb565b6102c861030136600461276e565b610a7b565b610186607581565b6101ab61031c366004612857565b610aa4565b61014961032f366004612634565b610abb565b6101496103423660046128c3565b610af1565b61035a610355366004612634565b610b84565b604051610155919061297b565b5f5f6103738585610c49565b90505f61037f86610de6565b5f8181526004602081815260408084208a5163ffffffff16855282528084208151608081018352815481526001820154818501528251808401845260028301548152600383015481860152818401529381018054835181860281018601909452808452969750949593949093606086019383018282801561041d57602002820191905f5260205f20905b815481526020019060010190808311610409575b50505050508152505090505f8160600151905085518451146104525760405163512509d360e11b815260040160405180910390fd5b5f5b84518110156104e7575f6127108883815181106104735761047361298d565b602002602001015161ffff168484815181106104915761049161298d565b60200260200101516104a391906129b5565b6104ad91906129e0565b9050808683815181106104c2576104c261298d565b602002602001015110156104de575f96505050505050506104f1565b50600101610454565b5060019450505050505b9392505050565b60606105048383610c49565b90505b92915050565b604080517fd9f77a423768f4b0526fa60a7c732334516a93f1d228dce50ad804ea74ced36e602082015263ffffffff841691810191909152606081018290525f906080015b60405160208183030381529060405280519060200120905092915050565b5f5f61058486848787600162061a80610e49565b9150915094509492505050565b5f5f61059c84610de6565b5f90815260046020908152604080832063ffffffff8716845290915290206001015491505092915050565b6105cf611dfa565b5f6105d985610de6565b5f81815260056020908152604080832063ffffffff89168452825280832087845282529182902082516080810184528154818501908152600183015460608301528152600282018054855181860281018601909652808652959650909491938584019390929083018282801561066c57602002820191905f5260205f20905b815481526020019060010190808311610658575b5050505050815250509150509392505050565b5f60758260405160200161069391906126db565b60408051601f19818403018152908290526106b192916020016129f3565b604051602081830303815290604052805190602001209050919050565b60606106f97f0000000000000000000000000000000000000000000000000000000000000000610f11565b905090565b5f5f61070985610de6565b5f81815260056020908152604080832063ffffffff8916845282528083208784528252808320815160808101835281548184019081526001830154606083015281526002820180548451818702810187019095528085529697509495909491938581019392919083018282801561079d57602002820191905f5260205f20905b815481526020019060010190808311610789575b50505091909252505081515191925050158015906107bf575080516020015115155b9695505050505050565b5f5f6107d483610de6565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6107fa83610de6565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461085e5760405163030c1b6b60e11b815260040160405180910390fd5b5f6108766108713687900387018761276e565b610de6565b5f8181526003602052604090205490915063ffffffff908116908516116108b057604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff8916855282529283902086518155818701516001820155928601518051600285015581015160038401556060860151805187949361090893908501920190611e24565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff871617905561093a90830183612a1c565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b03949094169390931790925561097991908401908401612a35565b5f828152600260209081526040808320805463ffffffff191663ffffffff958616179055600682528083209388168352929052819020805460ff19166001179055517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e906109ec90879087908790612a4e565b60405180910390a15050505050565b60605f610a0784610de6565b5f81815260046020818152604080842063ffffffff891685528252928390209091018054835181840281018401909452808452939450919290830182828015610a6d57602002820191905f5260205f20905b815481526020019060010190808311610a59575b505050505091505092915050565b5f5f610a8683610de6565b5f908152600160205260409020546001600160a01b03169392505050565b5f608e838360405160200161055293929190612a9a565b5f5f610ac684610de6565b5f90815260066020908152604080832063ffffffff8716845290915290205460ff1691505092915050565b5f5f610afd8585610c49565b90508251815114610b215760405163512509d360e11b815260040160405180910390fd5b5f5b8151811015610b7857838181518110610b3e57610b3e61298d565b6020026020010151828281518110610b5857610b5861298d565b60200260200101511015610b70575f925050506104f1565b600101610b23565b50600195945050505050565b610b8c611e6d565b5f610b9684610de6565b5f81815260046020818152604080842063ffffffff8916855282529283902083516080810185528154815260018201548184015284518086018652600283015481526003830154818501528186015292810180548551818502810185019096528086529596509294909360608601939092909190830182828015610c3757602002820191905f5260205f20905b815481526020019060010190808311610c23575b50505050508152505091505092915050565b6060610c53611e9f565b610c5c84610de6565b8082528351610c6b9190610f4e565b80515f908152600460208181526040808420875163ffffffff1685528252928390208351608081018552815481526001820154818401528451808601865260028301548152600383015481850152818601529281018054855181850281018501909652808652939491936060860193830182828015610d0757602002820191905f5260205f20905b815481526020019060010190808311610cf3575b505050919092525050506020820181905260600151516001600160401b03811115610d3457610d34611fcd565b604051908082528060200260200182016040528015610d5d578160200160208202803683370190505b5060408201525f5b81602001516060015151811015610dc1578160200151606001518181518110610d9057610d9061298d565b602002602001015182604001518281518110610dae57610dae61298d565b6020908102919091010152600101610d65565b50610dcc8184611088565b6060820152610ddb81846111e5565b604001519392505050565b5f815f0151826020015163ffffffff16604051602001610e3192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261050790612ac1565b5f5f5f610e5589611264565b90505f610e648a89898c6112ee565b90505f610e7b610e748a846113a2565b8b9061140a565b90505f610ebd610eb684610eb06040805180820182525f80825260209182015281518083019092526001825260029082015290565b906113a2565b859061140a565b90508715610ee257610ed982610ed161147e565b838c8b61153e565b96509450610f02565b610ef582610eee61147e565b838c611752565b95508515610f0257600194505b50505050965096945050505050565b60605f610f1d83611989565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f8281526002602052604090205463ffffffff16801580610f7e5750610f748183612ae4565b63ffffffff164211155b610f9b5760405163640fcd6b60e11b815260040160405180910390fd5b5f83815260066020908152604080832063ffffffff8616845290915290205460ff16610fda57604051630cad17b760e31b815260040160405180910390fd5b60405163193877e160e21b815263ffffffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906364e1df8490602401602060405180830381865afa158015611042573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110669190612b00565b61108357604051631b14174b60e01b815260040160405180910390fd5b505050565b6040805180820182525f80825260209182018190528251808401909352808352908201819052805b8360800151518110156111dd575f846080015182815181106110d4576110d461298d565b602002602001015190505f82111561111057805163ffffffff80851691161161111057604051631d8c4d1760e31b815260040160405180910390fd5b6020808701510151815163ffffffff161061113e576040516301fa53c760e11b815260040160405180910390fd5b855185515f9161114e91846119b0565b805190915061115e90869061140a565b94505f5b8160200151518110156111d0578760400151518110156111c857816020015181815181106111925761119261298d565b6020026020010151886040015182815181106111b0576111b061298d565b602002602001018181516111c49190612b1f565b9052505b600101611162565b50505191506001016110b0565b505092915050565b5f6112056111f68460600151611b27565b6020850151604001519061140a565b90505f611219835f0151846020015161050d565b90505f5f611231838587606001518860400151610570565b9150915081801561123f5750805b61125c5760405163439cc0cd60e01b815260040160405180910390fd5b505050505050565b604080518082019091525f80825260208201525f80806112915f516020612b595f395f51905f5286612b32565b90505b61129d81611bbd565b90935091505f516020612b595f395f51905f5282830983036112d5576040805180820190915290815260208101919091529392505050565b5f516020612b595f395f51905f52600182089050611294565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c6113999190612b32565b95945050505050565b604080518082019091525f80825260208201526113bd611ee4565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa905080806113eb57fe5b50806111dd57604051632319df1960e11b815260040160405180910390fd5b604080518082019091525f8082526020820152611425611f02565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa9050808061145f57fe5b50806111dd5760405163d4b68fd760e01b815260040160405180910390fd5b611486611f20565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f9182919061156f611f40565b5f5b6002811015611726575f6115868260066129b5565b905084826002811061159a5761159a61298d565b602002015151836115ab835f612b45565b600c81106115bb576115bb61298d565b60200201528482600281106115d2576115d261298d565b602002015160200151838260016115e99190612b45565b600c81106115f9576115f961298d565b60200201528382600281106116105761161061298d565b6020020151515183611623836002612b45565b600c81106116335761163361298d565b602002015283826002811061164a5761164a61298d565b6020020151516001602002015183611663836003612b45565b600c81106116735761167361298d565b602002015283826002811061168a5761168a61298d565b6020020151602001515f600281106116a4576116a461298d565b6020020151836116b5836004612b45565b600c81106116c5576116c561298d565b60200201528382600281106116dc576116dc61298d565b6020020151602001516001600281106116f7576116f761298d565b602002015183611708836005612b45565b600c81106117185761171861298d565b602002015250600101611571565b5061172f611f5f565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f91611780611f40565b5f5b6002811015611937575f6117978260066129b5565b90508482600281106117ab576117ab61298d565b602002015151836117bc835f612b45565b600c81106117cc576117cc61298d565b60200201528482600281106117e3576117e361298d565b602002015160200151838260016117fa9190612b45565b600c811061180a5761180a61298d565b60200201528382600281106118215761182161298d565b6020020151515183611834836002612b45565b600c81106118445761184461298d565b602002015283826002811061185b5761185b61298d565b6020020151516001602002015183611874836003612b45565b600c81106118845761188461298d565b602002015283826002811061189b5761189b61298d565b6020020151602001515f600281106118b5576118b561298d565b6020020151836118c6836004612b45565b600c81106118d6576118d661298d565b60200201528382600281106118ed576118ed61298d565b6020020151602001516001600281106119085761190861298d565b602002015183611919836005612b45565b600c81106119295761192961298d565b602002015250600101611782565b50611940611f5f565b5f6020826101808560086107d05a03fa9050808061195a57fe5b5080611979576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f60ff8216601f81111561050757604051632cd44ac360e21b815260040160405180910390fd5b6119b8611dfa565b5f84815260056020908152604080832063ffffffff8088168552908352818420865190911684528252808320815160808101835281548184019081526001830154606083015281526002820180548451818702810187019095528085529194929385840193909290830182828015611a4d57602002820191905f5260205f20905b815481526020019060010190808311611a39575b5050509190925250508151519192505f911515905080611a71575081516020015115155b905080611b1a575f611a918787875f015188604001518960200151611c39565b905080611ab15760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192611b099260028501920190611e24565b509050508460400151935050611b1e565b8192505b50509392505050565b604080518082019091525f80825260208201528151158015611b4b57506020820151155b15611b68575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f516020612b595f395f51905f528460200151611b999190612b32565b611bb0905f516020612b595f395f51905f52612b1f565b905292915050565b919050565b5f80805f516020612b595f395f51905f5260035f516020612b595f395f51905f52865f516020612b595f395f51905f52888909090890505f611c2d827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f516020612b595f395f51905f52611c87565b91959194509092505050565b5f5f611c448461067f565b5f88815260046020908152604080832063ffffffff808c168552925290912054919250611c7b908590839085908a811690611d0016565b98975050505050505050565b5f5f611c91611f5f565b611c99611f7d565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280611cd657fe5b5082611cf55760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b5f83611d1f576040516329e7276760e11b815260040160405180910390fd5b83611d2b868585611d35565b1495945050505050565b5f83515f03611d455750816104f1565b60208451611d539190612b32565b15611d71576040516313717da960e21b815260040160405180910390fd5b8260205b85518111611dd257611d88600285612b32565b5f03611da957815f528086015160205260405f209150600284049350611dc0565b808601515f528160205260405f2091506002840493505b611dcb602082612b45565b9050611d75565b508215611df2576040516363df817160e01b815260040160405180910390fd5b949350505050565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b828054828255905f5260205f20908101928215611e5d579160200282015b82811115611e5d578251825591602001919060010190611e42565b50611e69929150611f9b565b5090565b60405180608001604052805f81526020015f8152602001611e1760405180604001604052805f81526020015f81525090565b60405180608001604052805f8152602001611eb8611e6d565b815260200160608152602001611edf60405180604001604052805f81526020015f81525090565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611f33611faf565b8152602001611edf611faf565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b80821115611e69575f8155600101611f9c565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b038111828210171561200357612003611fcd565b60405290565b60405160a081016001600160401b038111828210171561200357612003611fcd565b604051606081016001600160401b038111828210171561200357612003611fcd565b604051608081016001600160401b038111828210171561200357612003611fcd565b604051601f8201601f191681016001600160401b038111828210171561209757612097611fcd565b604052919050565b80356001600160a01b0381168114611bb8575f5ffd5b803563ffffffff81168114611bb8575f5ffd5b5f604082840312156120d8575f5ffd5b6120e0611fe1565b90506120eb8261209f565b81526120f9602083016120b5565b602082015292915050565b5f60408284031215612114575f5ffd5b61211c611fe1565b823581526020928301359281019290925250919050565b5f82601f830112612142575f5ffd5b61214a611fe1565b80604084018581111561215b575f5ffd5b845b8181101561217557803584526020938401930161215d565b509095945050505050565b5f60808284031215612190575f5ffd5b612198611fe1565b90506121a48383612133565b81526120f98360408401612133565b5f6001600160401b038211156121cb576121cb611fcd565b5060051b60200190565b5f82601f8301126121e4575f5ffd5b81356121f76121f2826121b3565b61206f565b8082825260208201915060208360051b860101925085831115612218575f5ffd5b602085015b8381101561223557803583526020928301920161221d565b5095945050505050565b5f6060828403121561224f575f5ffd5b612257611fe1565b90506122638383612104565b815260408201356001600160401b0381111561227d575f5ffd5b612289848285016121d5565b60208301525092915050565b5f61012082840312156122a6575f5ffd5b6122ae612009565b90506122b9826120b5565b8152602082810135908201526122d28360408401612104565b60408201526122e48360808401612180565b60608201526101008201356001600160401b03811115612302575f5ffd5b8201601f81018413612312575f5ffd5b80356123206121f2826121b3565b8082825260208201915060208360051b850101925086831115612341575f5ffd5b602084015b838110156124515780356001600160401b03811115612363575f5ffd5b85016060818a03601f19011215612378575f5ffd5b61238061202b565b61238c602083016120b5565b815260408201356001600160401b038111156123a6575f5ffd5b82016020810190603f018b136123ba575f5ffd5b80356001600160401b038111156123d3576123d3611fcd565b6123e6601f8201601f191660200161206f565b8181528c60208385010111156123fa575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b0381111561242d575f5ffd5b61243c8b60208386010161223f565b60408301525084525060209283019201612346565b5060808501525091949350505050565b5f5f5f60808486031215612473575f5ffd5b61247d85856120c8565b925060408401356001600160401b03811115612497575f5ffd5b6124a386828701612295565b92505060608401356001600160401b038111156124be575f5ffd5b8401601f810186136124ce575f5ffd5b80356124dc6121f2826121b3565b8082825260208201915060208360051b8501019250888311156124fd575f5ffd5b6020840193505b8284101561252e57833561ffff8116811461251d575f5ffd5b825260209384019390910190612504565b809450505050509250925092565b5f5f6060838503121561254d575f5ffd5b61255784846120c8565b915060408301356001600160401b03811115612571575f5ffd5b61257d85828601612295565b9150509250929050565b602080825282518282018190525f918401906040840190835b818110156121755783518352602093840193909201916001016125a0565b5f5f604083850312156125cf575f5ffd5b6125d8836120b5565b946020939093013593505050565b5f5f5f5f61012085870312156125fa575f5ffd5b8435935061260b8660208701612104565b925061261a8660608701612180565b91506126298660e08701612104565b905092959194509250565b5f5f60608385031215612645575f5ffd5b61264f84846120c8565b915061265d604084016120b5565b90509250929050565b5f5f5f60808486031215612678575f5ffd5b61268285856120c8565b9250612690604085016120b5565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b828110156126d15781518652602095860195909101906001016126b3565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611df260808401826126a1565b5f60208284031215612718575f5ffd5b81356001600160401b0381111561272d575f5ffd5b611df28482850161223f565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6040828403121561277e575f5ffd5b61050483836120c8565b5f60408284031215612798575f5ffd5b50919050565b5f5f5f5f60c085870312156127b1575f5ffd5b6127bb8686612788565b93506127c9604086016120b5565b925060608501356001600160401b038111156127e3575f5ffd5b850160a081880312156127f4575f5ffd5b6127fc61204d565b81358152602080830135908201526128178860408401612104565b604082015260808201356001600160401b03811115612834575f5ffd5b612840898285016121d5565b606083015250925061262990508660808701612788565b5f5f60208385031215612868575f5ffd5b82356001600160401b0381111561287d575f5ffd5b8301601f8101851361288d575f5ffd5b80356001600160401b038111156128a2575f5ffd5b8560208284010111156128b3575f5ffd5b6020919091019590945092505050565b5f5f5f608084860312156128d5575f5ffd5b6128df85856120c8565b925060408401356001600160401b038111156128f9575f5ffd5b61290586828701612295565b92505060608401356001600160401b03811115612920575f5ffd5b61292c868287016121d5565b9150509250925092565b80518252602081015160208301525f6040820151612961604085018280518252602090810151910152565b50606082015160a06080850152611df260a08501826126a1565b602081525f6105046020830184612936565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610507576105076129a1565b634e487b7160e01b5f52601260045260245ffd5b5f826129ee576129ee6129cc565b500490565b60ff60f81b8360f81b1681525f82518060208501600185015e5f92016001019182525092915050565b5f60208284031215612a2c575f5ffd5b6105048261209f565b5f60208284031215612a45575f5ffd5b610504826120b5565b6001600160a01b03612a5f8561209f565b16815263ffffffff612a73602086016120b5565b16602082015263ffffffff83166040820152608060608201525f6113996080830184612936565b60f884901b6001600160f81b0319168152818360018301375f910160010190815292915050565b80516020808301519190811015612798575f1960209190910360031b1b16919050565b63ffffffff8181168382160190811115610507576105076129a1565b5f60208284031215612b10575f5ffd5b815180151581146104f1575f5ffd5b81810381811115610507576105076129a1565b5f82612b4057612b406129cc565b500690565b80820180821115610507576105076129a156fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a264697066735822122047efe08902b75ecc731f770008e0f2e919f7167601f0783a4a7fbbb3e147b78c64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_operatorTableUpdater\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"OPERATOR_INFO_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_TABLE_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCertificateDigest\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorInfoLeaf\",\"inputs\":[{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableLeaf\",\"inputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getNonsignerOperatorInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isNonsignerCached\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isReferenceTimestampSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorTableUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"trySignatureVerification\",\"inputs\":[{\"name\":\"msgHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"aggPubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apkG2\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"pairingSuccessful\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"signatureValid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"totalSignedStakeWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorSetInfo\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonSignerIndicesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", + Bin: "0x60a060405234801561000f575f5ffd5b50604051612c1d380380612c1d83398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b608051612ac56101585f395f8181610286015281816107d00152610f680152612ac55ff3fe608060405234801561000f575f5ffd5b5060043610610127575f3560e01c80636141879e116100a9578063a2c902f51161006e578063a2c902f5146102e6578063a2f2e24d146102ee578063cd83a72b14610301578063dd2ae1b914610314578063eb39e68f14610327575f5ffd5b80636141879e146102595780636738c40b1461026c57806368d6e081146102815780637d1d1f5b146102c057806384818920146102d3575f5ffd5b806323c2a3cb116100ef57806323c2a3cb146101d857806326af6a3c146101eb578063538a37901461020b5780635be872741461021e5780635ddb9b5b14610231575f5ffd5b8063017d79741461012b578063080b715014610153578063121409ea14610173578063184674341461018d5780631a18746c146101ae575b5f5ffd5b61013e6101393660046123ad565b610347565b60405190151581526020015b60405180910390f35b610166610161366004612488565b6104d8565b60405161014a91906124d3565b61017b608e81565b60405160ff909116815260200161014a565b6101a061019b36600461250a565b6104ed565b60405190815260200161014a565b6101c16101bc366004612532565b610550565b60408051921515835290151560208301520161014a565b6101a06101e6366004612580565b610571565b6101fe6101f93660046125b2565b6105a7565b60405161014a9190612627565b6101a0610219366004612654565b61065f565b61013e61022c3660046125b2565b6106ae565b61024461023f366004612685565b610779565b60405163ffffffff909116815260200161014a565b610244610267366004612685565b61079f565b61027f61027a3660046126b5565b6107c5565b005b6102a87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014a565b6101666102ce366004612580565b6109ab565b6102a86102e1366004612685565b610a2b565b61017b607581565b6101a06102fc36600461276e565b610a54565b61013e61030f366004612580565b610a6b565b61013e6103223660046127da565b610aa1565b61033a610335366004612580565b610b34565b60405161014a9190612892565b5f5f6103538585610bf9565b90505f61035f86610d96565b5f8181526004602081815260408084208a5163ffffffff1685528252808420815160808101835281548152600182015481850152825180840184526002830154815260038301548186015281840152938101805483518186028101860190945280845296975094959394909360608601938301828280156103fd57602002820191905f5260205f20905b8154815260200190600101908083116103e9575b50505050508152505090505f8160600151905085518451146104325760405163512509d360e11b815260040160405180910390fd5b5f5b84518110156104c7575f612710888381518110610453576104536128a4565b602002602001015161ffff16848481518110610471576104716128a4565b602002602001015161048391906128cc565b61048d91906128f7565b9050808683815181106104a2576104a26128a4565b602002602001015110156104be575f96505050505050506104d1565b50600101610434565b5060019450505050505b9392505050565b60606104e48383610bf9565b90505b92915050565b604080517fd9f77a423768f4b0526fa60a7c732334516a93f1d228dce50ad804ea74ced36e602082015263ffffffff841691810191909152606081018290525f906080015b60405160208183030381529060405280519060200120905092915050565b5f5f61056486848787600162061a80610df9565b9150915094509492505050565b5f5f61057c84610d96565b5f90815260046020908152604080832063ffffffff8716845290915290206001015491505092915050565b6105af611d46565b5f6105b985610d96565b5f81815260056020908152604080832063ffffffff89168452825280832087845282529182902082516080810184528154818501908152600183015460608301528152600282018054855181860281018601909652808652959650909491938584019390929083018282801561064c57602002820191905f5260205f20905b815481526020019060010190808311610638575b5050505050815250509150509392505050565b5f6075826040516020016106739190612627565b60408051601f1981840301815290829052610691929160200161290a565b604051602081830303815290604052805190602001209050919050565b5f5f6106b985610d96565b5f81815260056020908152604080832063ffffffff8916845282528083208784528252808320815160808101835281548184019081526001830154606083015281526002820180548451818702810187019095528085529697509495909491938581019392919083018282801561074d57602002820191905f5260205f20905b815481526020019060010190808311610739575b505050919092525050815151919250501580159061076f575080516020015115155b9695505050505050565b5f5f61078483610d96565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6107aa83610d96565b5f9081526002602052604090205463ffffffff169392505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461080e5760405163030c1b6b60e11b815260040160405180910390fd5b5f61082661082136879003870187612685565b610d96565b5f8181526003602052604090205490915063ffffffff9081169085161161086057604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020818152604080842063ffffffff891685528252928390208651815581870151600182015592860151805160028501558101516003840155606086015180518794936108b893908501920190611d70565b5050505f818152600360209081526040909120805463ffffffff191663ffffffff87161790556108ea90830183612933565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b0394909416939093179092556109299190840190840161294c565b5f828152600260209081526040808320805463ffffffff191663ffffffff958616179055600682528083209388168352929052819020805460ff19166001179055517f93e6bea1c9b5dce4a5c07b00261e956df2a4a253d9ab6ca070ca2037d72ada9e9061099c90879087908790612965565b60405180910390a15050505050565b60605f6109b784610d96565b5f81815260046020818152604080842063ffffffff891685528252928390209091018054835181840281018401909452808452939450919290830182828015610a1d57602002820191905f5260205f20905b815481526020019060010190808311610a09575b505050505091505092915050565b5f5f610a3683610d96565b5f908152600160205260409020546001600160a01b03169392505050565b5f608e8383604051602001610532939291906129b1565b5f5f610a7684610d96565b5f90815260066020908152604080832063ffffffff8716845290915290205460ff1691505092915050565b5f5f610aad8585610bf9565b90508251815114610ad15760405163512509d360e11b815260040160405180910390fd5b5f5b8151811015610b2857838181518110610aee57610aee6128a4565b6020026020010151828281518110610b0857610b086128a4565b60200260200101511015610b20575f925050506104d1565b600101610ad3565b50600195945050505050565b610b3c611db9565b5f610b4684610d96565b5f81815260046020818152604080842063ffffffff8916855282529283902083516080810185528154815260018201548184015284518086018652600283015481526003830154818501528186015292810180548551818502810185019096528086529596509294909360608601939092909190830182828015610be757602002820191905f5260205f20905b815481526020019060010190808311610bd3575b50505050508152505091505092915050565b6060610c03611deb565b610c0c84610d96565b8082528351610c1b9190610ec1565b80515f908152600460208181526040808420875163ffffffff1685528252928390208351608081018552815481526001820154818401528451808601865260028301548152600383015481850152818601529281018054855181850281018501909652808652939491936060860193830182828015610cb757602002820191905f5260205f20905b815481526020019060010190808311610ca3575b505050919092525050506020820181905260600151516001600160401b03811115610ce457610ce4611f19565b604051908082528060200260200182016040528015610d0d578160200160208202803683370190505b5060408201525f5b81602001516060015151811015610d71578160200151606001518181518110610d4057610d406128a4565b602002602001015182604001518281518110610d5e57610d5e6128a4565b6020908102919091010152600101610d15565b50610d7c8184610ffb565b6060820152610d8b8184611158565b604001519392505050565b5f815f0151826020015163ffffffff16604051602001610de192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526104e7906129d8565b5f5f5f610e05896111d7565b90505f610e148a89898c611261565b90505f610e2b610e248a84611315565b8b9061137d565b90505f610e6d610e6684610e606040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611315565b859061137d565b90508715610e9257610e8982610e816113f1565b838c8b6114b1565b96509450610eb2565b610ea582610e9e6113f1565b838c6116c5565b95508515610eb257600194505b50505050965096945050505050565b5f8281526002602052604090205463ffffffff16801580610ef15750610ee781836129fb565b63ffffffff164211155b610f0e5760405163640fcd6b60e11b815260040160405180910390fd5b5f83815260066020908152604080832063ffffffff8616845290915290205460ff16610f4d57604051630cad17b760e31b815260040160405180910390fd5b60405163193877e160e21b815263ffffffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906364e1df8490602401602060405180830381865afa158015610fb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd99190612a17565b610ff657604051631b14174b60e01b815260040160405180910390fd5b505050565b6040805180820182525f80825260209182018190528251808401909352808352908201819052805b836080015151811015611150575f84608001518281518110611047576110476128a4565b602002602001015190505f82111561108357805163ffffffff80851691161161108357604051631d8c4d1760e31b815260040160405180910390fd5b6020808701510151815163ffffffff16106110b1576040516301fa53c760e11b815260040160405180910390fd5b855185515f916110c191846118fc565b80519091506110d190869061137d565b94505f5b8160200151518110156111435787604001515181101561113b5781602001518181518110611105576111056128a4565b602002602001015188604001518281518110611123576111236128a4565b602002602001018181516111379190612a36565b9052505b6001016110d5565b5050519150600101611023565b505092915050565b5f6111786111698460600151611a73565b6020850151604001519061137d565b90505f61118c835f015184602001516104ed565b90505f5f6111a4838587606001518860400151610550565b915091508180156111b25750805b6111cf5760405163439cc0cd60e01b815260040160405180910390fd5b505050505050565b604080518082019091525f80825260208201525f80806112045f516020612a705f395f51905f5286612a49565b90505b61121081611b09565b90935091505f516020612a705f395f51905f528283098303611248576040805180820190915290815260208101919091529392505050565b5f516020612a705f395f51905f52600182089050611207565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c61130c9190612a49565b95945050505050565b604080518082019091525f8082526020820152611330611e30565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa9050808061135e57fe5b508061115057604051632319df1960e11b815260040160405180910390fd5b604080518082019091525f8082526020820152611398611e4e565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa905080806113d257fe5b50806111505760405163d4b68fd760e01b815260040160405180910390fd5b6113f9611e6c565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f918291906114e2611e8c565b5f5b6002811015611699575f6114f98260066128cc565b905084826002811061150d5761150d6128a4565b6020020151518361151e835f612a5c565b600c811061152e5761152e6128a4565b6020020152848260028110611545576115456128a4565b6020020151602001518382600161155c9190612a5c565b600c811061156c5761156c6128a4565b6020020152838260028110611583576115836128a4565b6020020151515183611596836002612a5c565b600c81106115a6576115a66128a4565b60200201528382600281106115bd576115bd6128a4565b60200201515160016020020151836115d6836003612a5c565b600c81106115e6576115e66128a4565b60200201528382600281106115fd576115fd6128a4565b6020020151602001515f60028110611617576116176128a4565b602002015183611628836004612a5c565b600c8110611638576116386128a4565b602002015283826002811061164f5761164f6128a4565b60200201516020015160016002811061166a5761166a6128a4565b60200201518361167b836005612a5c565b600c811061168b5761168b6128a4565b6020020152506001016114e4565b506116a2611eab565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f916116f3611e8c565b5f5b60028110156118aa575f61170a8260066128cc565b905084826002811061171e5761171e6128a4565b6020020151518361172f835f612a5c565b600c811061173f5761173f6128a4565b6020020152848260028110611756576117566128a4565b6020020151602001518382600161176d9190612a5c565b600c811061177d5761177d6128a4565b6020020152838260028110611794576117946128a4565b60200201515151836117a7836002612a5c565b600c81106117b7576117b76128a4565b60200201528382600281106117ce576117ce6128a4565b60200201515160016020020151836117e7836003612a5c565b600c81106117f7576117f76128a4565b602002015283826002811061180e5761180e6128a4565b6020020151602001515f60028110611828576118286128a4565b602002015183611839836004612a5c565b600c8110611849576118496128a4565b6020020152838260028110611860576118606128a4565b60200201516020015160016002811061187b5761187b6128a4565b60200201518361188c836005612a5c565b600c811061189c5761189c6128a4565b6020020152506001016116f5565b506118b3611eab565b5f6020826101808560086107d05a03fa905080806118cd57fe5b50806118ec576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b611904611d46565b5f84815260056020908152604080832063ffffffff808816855290835281842086519091168452825280832081516080810183528154818401908152600183015460608301528152600282018054845181870281018701909552808552919492938584019390929083018282801561199957602002820191905f5260205f20905b815481526020019060010190808311611985575b5050509190925250508151519192505f9115159050806119bd575081516020015115155b905080611a66575f6119dd8787875f015188604001518960200151611b85565b9050806119fd5760405163439cc0cd60e01b815260040160405180910390fd5b6040808601515f8981526005602090815283822063ffffffff808c1684529082528483208a5190911683528152929020815180518255830151600182015582820151805192939192611a559260028501920190611d70565b509050508460400151935050611a6a565b8192505b50509392505050565b604080518082019091525f80825260208201528151158015611a9757506020820151155b15611ab4575050604080518082019091525f808252602082015290565b6040518060400160405280835f015181526020015f516020612a705f395f51905f528460200151611ae59190612a49565b611afc905f516020612a705f395f51905f52612a36565b905292915050565b919050565b5f80805f516020612a705f395f51905f5260035f516020612a705f395f51905f52865f516020612a705f395f51905f52888909090890505f611b79827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f516020612a705f395f51905f52611bd3565b91959194509092505050565b5f5f611b908461065f565b5f88815260046020908152604080832063ffffffff808c168552925290912054919250611bc7908590839085908a811690611c4c16565b98975050505050505050565b5f5f611bdd611eab565b611be5611ec9565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280611c2257fe5b5082611c415760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b5f83611c6b576040516329e7276760e11b815260040160405180910390fd5b83611c77868585611c81565b1495945050505050565b5f83515f03611c915750816104d1565b60208451611c9f9190612a49565b15611cbd576040516313717da960e21b815260040160405180910390fd5b8260205b85518111611d1e57611cd4600285612a49565b5f03611cf557815f528086015160205260405f209150600284049350611d0c565b808601515f528160205260405f2091506002840493505b611d17602082612a5c565b9050611cc1565b508215611d3e576040516363df817160e01b815260040160405180910390fd5b949350505050565b604080516080810182525f91810182815260608201929092529081905b8152602001606081525090565b828054828255905f5260205f20908101928215611da9579160200282015b82811115611da9578251825591602001919060010190611d8e565b50611db5929150611ee7565b5090565b60405180608001604052805f81526020015f8152602001611d6360405180604001604052805f81526020015f81525090565b60405180608001604052805f8152602001611e04611db9565b815260200160608152602001611e2b60405180604001604052805f81526020015f81525090565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060400160405280611e7f611efb565b8152602001611e2b611efb565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b80821115611db5575f8155600101611ee8565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611f4f57611f4f611f19565b60405290565b60405160a081016001600160401b0381118282101715611f4f57611f4f611f19565b604051606081016001600160401b0381118282101715611f4f57611f4f611f19565b604051608081016001600160401b0381118282101715611f4f57611f4f611f19565b604051601f8201601f191681016001600160401b0381118282101715611fe357611fe3611f19565b604052919050565b80356001600160a01b0381168114611b04575f5ffd5b803563ffffffff81168114611b04575f5ffd5b5f60408284031215612024575f5ffd5b61202c611f2d565b905061203782611feb565b815261204560208301612001565b602082015292915050565b5f60408284031215612060575f5ffd5b612068611f2d565b823581526020928301359281019290925250919050565b5f82601f83011261208e575f5ffd5b612096611f2d565b8060408401858111156120a7575f5ffd5b845b818110156120c15780358452602093840193016120a9565b509095945050505050565b5f608082840312156120dc575f5ffd5b6120e4611f2d565b90506120f0838361207f565b8152612045836040840161207f565b5f6001600160401b0382111561211757612117611f19565b5060051b60200190565b5f82601f830112612130575f5ffd5b813561214361213e826120ff565b611fbb565b8082825260208201915060208360051b860101925085831115612164575f5ffd5b602085015b83811015612181578035835260209283019201612169565b5095945050505050565b5f6060828403121561219b575f5ffd5b6121a3611f2d565b90506121af8383612050565b815260408201356001600160401b038111156121c9575f5ffd5b6121d584828501612121565b60208301525092915050565b5f61012082840312156121f2575f5ffd5b6121fa611f55565b905061220582612001565b81526020828101359082015261221e8360408401612050565b604082015261223083608084016120cc565b60608201526101008201356001600160401b0381111561224e575f5ffd5b8201601f8101841361225e575f5ffd5b803561226c61213e826120ff565b8082825260208201915060208360051b85010192508683111561228d575f5ffd5b602084015b8381101561239d5780356001600160401b038111156122af575f5ffd5b85016060818a03601f190112156122c4575f5ffd5b6122cc611f77565b6122d860208301612001565b815260408201356001600160401b038111156122f2575f5ffd5b82016020810190603f018b13612306575f5ffd5b80356001600160401b0381111561231f5761231f611f19565b612332601f8201601f1916602001611fbb565b8181528c6020838501011115612346575f5ffd5b816020840160208301375f6020838301015280602085015250505060608201356001600160401b03811115612379575f5ffd5b6123888b60208386010161218b565b60408301525084525060209283019201612292565b5060808501525091949350505050565b5f5f5f608084860312156123bf575f5ffd5b6123c98585612014565b925060408401356001600160401b038111156123e3575f5ffd5b6123ef868287016121e1565b92505060608401356001600160401b0381111561240a575f5ffd5b8401601f8101861361241a575f5ffd5b803561242861213e826120ff565b8082825260208201915060208360051b850101925088831115612449575f5ffd5b6020840193505b8284101561247a57833561ffff81168114612469575f5ffd5b825260209384019390910190612450565b809450505050509250925092565b5f5f60608385031215612499575f5ffd5b6124a38484612014565b915060408301356001600160401b038111156124bd575f5ffd5b6124c9858286016121e1565b9150509250929050565b602080825282518282018190525f918401906040840190835b818110156120c15783518352602093840193909201916001016124ec565b5f5f6040838503121561251b575f5ffd5b61252483612001565b946020939093013593505050565b5f5f5f5f6101208587031215612546575f5ffd5b843593506125578660208701612050565b925061256686606087016120cc565b91506125758660e08701612050565b905092959194509250565b5f5f60608385031215612591575f5ffd5b61259b8484612014565b91506125a960408401612001565b90509250929050565b5f5f5f608084860312156125c4575f5ffd5b6125ce8585612014565b92506125dc60408501612001565b929592945050506060919091013590565b5f8151808452602084019350602083015f5b8281101561261d5781518652602095860195909101906001016125ff565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611d3e60808401826125ed565b5f60208284031215612664575f5ffd5b81356001600160401b03811115612679575f5ffd5b611d3e8482850161218b565b5f60408284031215612695575f5ffd5b6104e48383612014565b5f604082840312156126af575f5ffd5b50919050565b5f5f5f5f60c085870312156126c8575f5ffd5b6126d2868661269f565b93506126e060408601612001565b925060608501356001600160401b038111156126fa575f5ffd5b850160a0818803121561270b575f5ffd5b612713611f99565b813581526020808301359082015261272e8860408401612050565b604082015260808201356001600160401b0381111561274b575f5ffd5b61275789828501612121565b60608301525092506125759050866080870161269f565b5f5f6020838503121561277f575f5ffd5b82356001600160401b03811115612794575f5ffd5b8301601f810185136127a4575f5ffd5b80356001600160401b038111156127b9575f5ffd5b8560208284010111156127ca575f5ffd5b6020919091019590945092505050565b5f5f5f608084860312156127ec575f5ffd5b6127f68585612014565b925060408401356001600160401b03811115612810575f5ffd5b61281c868287016121e1565b92505060608401356001600160401b03811115612837575f5ffd5b61284386828701612121565b9150509250925092565b80518252602081015160208301525f6040820151612878604085018280518252602090810151910152565b50606082015160a06080850152611d3e60a08501826125ed565b602081525f6104e4602083018461284d565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176104e7576104e76128b8565b634e487b7160e01b5f52601260045260245ffd5b5f82612905576129056128e3565b500490565b60ff60f81b8360f81b1681525f82518060208501600185015e5f92016001019182525092915050565b5f60208284031215612943575f5ffd5b6104e482611feb565b5f6020828403121561295c575f5ffd5b6104e482612001565b6001600160a01b0361297685611feb565b16815263ffffffff61298a60208601612001565b16602082015263ffffffff83166040820152608060608201525f61130c608083018461284d565b60f884901b6001600160f81b0319168152818360018301375f910160010190815292915050565b805160208083015191908110156126af575f1960209190910360031b1b16919050565b63ffffffff81811683821601908111156104e7576104e76128b8565b5f60208284031215612a27575f5ffd5b815180151581146104d1575f5ffd5b818103818111156104e7576104e76128b8565b5f82612a5757612a576128e3565b500690565b808201808211156104e7576104e76128b856fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220207e95b97158fb6b207979ba2c964ffa52769133be22cef0b4e7df97c209215264736f6c634300081e0033", } // BN254CertificateVerifierABI is the input ABI used to generate the binding from. @@ -98,7 +98,7 @@ var BN254CertificateVerifierABI = BN254CertificateVerifierMetaData.ABI var BN254CertificateVerifierBin = BN254CertificateVerifierMetaData.Bin // DeployBN254CertificateVerifier deploys a new Ethereum contract, binding an instance of BN254CertificateVerifier to it. -func DeployBN254CertificateVerifier(auth *bind.TransactOpts, backend bind.ContractBackend, _operatorTableUpdater common.Address, _version string) (common.Address, *types.Transaction, *BN254CertificateVerifier, error) { +func DeployBN254CertificateVerifier(auth *bind.TransactOpts, backend bind.ContractBackend, _operatorTableUpdater common.Address) (common.Address, *types.Transaction, *BN254CertificateVerifier, error) { parsed, err := BN254CertificateVerifierMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -107,7 +107,7 @@ func DeployBN254CertificateVerifier(auth *bind.TransactOpts, backend bind.Contra return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BN254CertificateVerifierBin), backend, _operatorTableUpdater, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(BN254CertificateVerifierBin), backend, _operatorTableUpdater) if err != nil { return common.Address{}, nil, nil, err } @@ -766,37 +766,6 @@ func (_BN254CertificateVerifier *BN254CertificateVerifierCallerSession) TrySigna return _BN254CertificateVerifier.Contract.TrySignatureVerification(&_BN254CertificateVerifier.CallOpts, msgHash, aggPubkey, apkG2, signature) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_BN254CertificateVerifier *BN254CertificateVerifierCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _BN254CertificateVerifier.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_BN254CertificateVerifier *BN254CertificateVerifierSession) Version() (string, error) { - return _BN254CertificateVerifier.Contract.Version(&_BN254CertificateVerifier.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_BN254CertificateVerifier *BN254CertificateVerifierCallerSession) Version() (string, error) { - return _BN254CertificateVerifier.Contract.Version(&_BN254CertificateVerifier.CallOpts) -} - // UpdateOperatorTable is a paid mutator transaction binding the contract method 0x6738c40b. // // Solidity: function updateOperatorTable((address,uint32) operatorSet, uint32 referenceTimestamp, (bytes32,uint256,(uint256,uint256),uint256[]) operatorSetInfo, (address,uint32) operatorSetConfig) returns() diff --git a/pkg/bindings/BN254SignatureVerifier/binding.go b/pkg/bindings/BN254SignatureVerifier/binding.go index 8556b1c6e7..f4898f994c 100644 --- a/pkg/bindings/BN254SignatureVerifier/binding.go +++ b/pkg/bindings/BN254SignatureVerifier/binding.go @@ -32,7 +32,7 @@ var ( // BN254SignatureVerifierMetaData contains all meta data concerning the BN254SignatureVerifier contract. var BN254SignatureVerifierMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea264697066735822122099890b68aab0bf243dce6fa1d9c78bbdb3bbd47fb6b3dbc51c4b9691de9707ef64736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212208abc0c24d34aef86cead2de597fb19fcedfef15a892898b49b7ac07905f47f5c64736f6c634300081e0033", } // BN254SignatureVerifierABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/BackingEigen/binding.go b/pkg/bindings/BackingEigen/binding.go index 27a90463bf..fad266f200 100644 --- a/pkg/bindings/BackingEigen/binding.go +++ b/pkg/bindings/BackingEigen/binding.go @@ -38,7 +38,7 @@ type ERC20VotesUpgradeableCheckpoint struct { // BackingEigenMetaData contains all meta data concerning the BackingEigen contract. var BackingEigenMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"DOMAIN_SEPARATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"EIGEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowedFrom\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowedTo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burn\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"checkpoints\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pos\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structERC20VotesUpgradeable.Checkpoint\",\"components\":[{\"name\":\"fromBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"votes\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint48\",\"internalType\":\"uint48\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegate\",\"inputs\":[{\"name\":\"delegatee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateBySig\",\"inputs\":[{\"name\":\"delegatee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegates\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableTransferRestrictions\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eip712Domain\",\"inputs\":[],\"outputs\":[{\"name\":\"fields\",\"type\":\"bytes1\",\"internalType\":\"bytes1\"},{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"verifyingContract\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extensions\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPastTotalSupply\",\"inputs\":[{\"name\":\"timepoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPastVotes\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"timepoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVotes\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMinter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numCheckpoints\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permit\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"deadline\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllowedFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowedFrom\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllowedTo\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowedTo\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setIsMinter\",\"inputs\":[{\"name\":\"minterAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newStatus\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferRestrictionsDisabledAfter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Backed\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegateChanged\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"fromDelegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"toDelegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegateVotesChanged\",\"inputs\":[{\"name\":\"delegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"previousBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"IsMinterModified\",\"inputs\":[{\"name\":\"minterAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newStatus\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"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\":\"SetAllowedFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"isAllowedFrom\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetAllowedTo\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"isAllowedTo\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransferRestrictionsDisabled\",\"inputs\":[],\"anonymous\":false}]", - Bin: "0x60a060405234801561000f575f5ffd5b50604051612d11380380612d1183398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b608051612bb261015f5f395f81816105e901528181610dae01528181610dd90152610e040152612bb25ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80637ecebe0011610135578063aa271e1a116100b4578063dd62ed3e11610079578063dd62ed3e14610579578063eb415f451461058c578063f1127ed814610594578063f2fde38b146105d1578063fdc371ce146105e4575f5ffd5b8063aa271e1a1461050a578063b8c255941461052d578063c3cda52014610540578063c4d66de814610553578063d505accf14610566575f5ffd5b806395d89b41116100fa57806395d89b41146104bf5780639ab24eb0146104c75780639aec4bae146104da578063a457c2d7146104e4578063a9059cbb146104f7575f5ffd5b80637ecebe001461044e57806384b0196e146104615780638da5cb5b1461047c5780638e539e8c1461048d57806391ddadf4146104a0575f5ffd5b806340c10f19116101c157806366eb399f1161018657806366eb399f146103c05780636fcfff45146103d357806370a08231146103fb578063715018a61461042357806378aa33ba1461042b575f5ffd5b806340c10f191461031a57806342966c681461032d5780634bf5d7e914610340578063587cde1e1461036a5780635c19a95c146103ad575f5ffd5b806323b872dd1161020757806323b872dd146102ca578063313ce567146102dd5780633644e515146102ec57806339509351146102f45780633a46b1a814610307575f5ffd5b80630455e6941461024357806306fdde031461027b578063095ea7b31461029057806318160ddd146102a35780631ffacdef146102b5575b5f5ffd5b610266610251366004612682565b6101316020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61028361060b565b60405161027291906126c9565b61026661029e3660046126db565b61069b565b6067545b604051908152602001610272565b6102c86102c3366004612703565b6106b4565b005b6102666102d836600461273c565b6106ca565b60405160128152602001610272565b6102a76106ed565b6102666103023660046126db565b6106fb565b6102a76103153660046126db565b61071c565b6102c86103283660046126db565b6107a4565b6102c861033b366004612776565b61081f565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610283565b610395610378366004612682565b6001600160a01b039081165f90815260fe60205260409020541690565b6040516001600160a01b039091168152602001610272565b6102c86103bb366004612682565b61082c565b6102c86103ce366004612703565b610836565b6103e66103e1366004612682565b6108ae565b60405163ffffffff9091168152602001610272565b6102a7610409366004612682565b6001600160a01b03165f9081526065602052604090205490565b6102c86108cf565b610266610439366004612682565b6101326020525f908152604090205460ff1681565b6102a761045c366004612682565b6108e2565b6104696108ff565b604051610272979695949392919061278d565b6033546001600160a01b0316610395565b6102a761049b366004612776565b610998565b6104a86109ff565b60405165ffffffffffff9091168152602001610272565b610283610a09565b6102a76104d5366004612682565b610a18565b6102a76101305481565b6102666104f23660046126db565b610a95565b6102666105053660046126db565b610b0f565b610266610518366004612682565b6101336020525f908152604090205460ff1681565b6102c861053b366004612703565b610b1c565b6102c861054e366004612833565b610b2e565b6102c8610561366004612682565b610c63565b6102c8610574366004612887565b610ea5565b6102a76105873660046128ed565b611006565b6102c8611030565b6105a76105a236600461291e565b6110fe565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610272565b6102c86105df366004612682565b61117f565b6103957f000000000000000000000000000000000000000000000000000000000000000081565b60606068805461061a90612950565b80601f016020809104026020016040519081016040528092919081815260200182805461064690612950565b80156106915780601f1061066857610100808354040283529160200191610691565b820191905f5260205f20905b81548152906001019060200180831161067457829003601f168201915b5050505050905090565b5f336106a88185856111f5565b60019150505b92915050565b6106bc611318565b6106c68282611372565b5050565b5f336106d78582856113d2565b6106e285858561144a565b506001949350505050565b5f6106f6611604565b905090565b5f336106a881858561070d8383611006565b6107179190612996565b6111f5565b5f6107256109ff565b65ffffffffffff16821061077c5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b0383165f90815260ff6020526040902061079d908361160d565b9392505050565b335f908152610133602052604090205460ff166108155760405162461bcd60e51b815260206004820152602960248201527f4261636b696e67456967656e2e6d696e743a2063616c6c6572206973206e6f7460448201526810309036b4b73a32b960b91b6064820152608401610773565b6106c682826116ee565b6108293382611779565b50565b6108293382611792565b61083e611318565b816001600160a01b03167f0124b12503bddc2616c0f3f54fd23ed283f5ef0c1483a75409e42612176b8bde8260405161087b911515815260200190565b60405180910390a26001600160a01b03919091165f90815261013360205260409020805460ff1916911515919091179055565b6001600160a01b0381165f90815260ff60205260408120546106ae9061180b565b6108d7611318565b6108e05f611873565b565b6001600160a01b0381165f90815260cb60205260408120546106ae565b5f6060805f5f5f60606097545f5f1b14801561091b5750609854155b61095f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610773565b6109676118c4565b61096f6118d3565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f6109a16109ff565b65ffffffffffff1682106109f35760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610773565b6106ae6101008361160d565b5f6106f6426118e2565b60606069805461061a90612950565b6001600160a01b0381165f90815260ff60205260408120548015610a83576001600160a01b0383165f90815260ff6020526040902080545f198301908110610a6257610a626129bd565b5f9182526020909120015464010000000090046001600160e01b0316610a85565b5f5b6001600160e01b03169392505050565b5f3381610aa28286611006565b905083811015610b025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610773565b6106e282868684036111f5565b5f336106a881858561144a565b610b24611318565b6106c68282611948565b83421115610b7e5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610773565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90610bf790610bef9060a001604051602081830303815290604052805190602001206119a0565b8585856119cc565b9050610c02816119f2565b8614610c505760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610773565b610c5a8188611792565b50505050505050565b5f54610100900460ff1615808015610c8157505f54600160ff909116105b80610c9a5750303b158015610c9a57505f5460ff166001145b610cfd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610773565b5f805460ff191660011790558015610d1e575f805461ff0019166101001790555b610d26611a19565b610d736040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b815250611a47565b610d7c82611873565b610da3604051806040016040528060068152602001653122a4a3a2a760d11b815250611a77565b5f1961013055610dd47f00000000000000000000000000000000000000000000000000000000000000006001611372565b610dff7f00000000000000000000000000000000000000000000000000000000000000006001611948565b610e357f00000000000000000000000000000000000000000000000000000000000000006b05686877afb5cbccbf7340006116ee565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d26905f90a180156106c6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610ef55760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610773565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f238c6119f2565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f610f7d826119a0565b90505f610f8c828787876119cc565b9050896001600160a01b0316816001600160a01b031614610fef5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610773565b610ffa8a8a8a6111f5565b50505050505050505050565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205490565b611038611318565b5f1961013054146110ce5760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a401610773565b5f6101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b604080518082019091525f80825260208201526001600160a01b0383165f90815260ff60205260409020805463ffffffff8416908110611140576111406129bd565b5f9182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b611187611318565b6001600160a01b0381166111ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610773565b61082981611873565b6001600160a01b0383166112575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610773565b6001600160a01b0382166112b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610773565b6001600160a01b038381165f8181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146108e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610773565b6001600160a01b0382165f8181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b5f6113dd8484611006565b90505f19811461144457818110156114375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610773565b61144484848484036111f5565b50505050565b6001600160a01b0383166114ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610773565b6001600160a01b0382166115105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610773565b61151b838383611ac0565b6001600160a01b0383165f90815260656020526040902054818110156115925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610773565b6001600160a01b038085165f8181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115f19086815260200190565b60405180910390a3611444848484611b9c565b5f6106f6611bcd565b81545f9081816005811115611664575f61162684611c40565b61163090856129d1565b5f88815260209020909150869082015463ffffffff16111561165457809150611662565b61165f816001612996565b92505b505b808210156116af575f6116778383611d24565b5f88815260209020909150869082015463ffffffff16111561169b578091506116a9565b6116a6816001612996565b92505b50611664565b80156116d9575f8681526020902081015f19015464010000000090046001600160e01b03166116db565b5f5b6001600160e01b03169695505050505050565b6116f88282611d3e565b6067546001600160e01b03101561176a5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610773565b611444610100611e0f83611e1a565b6117838282611f86565b6114446101006120c983611e1a565b6001600160a01b038281165f81815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46114448284836120d4565b5f63ffffffff82111561186f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610773565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606099805461061a90612950565b6060609a805461061a90612950565b5f65ffffffffffff82111561186f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610773565b6001600160a01b0382165f8181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016113c6565b5f6106ae6119ac611604565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f6119db8787878761220e565b915091506119e8816122cb565b5095945050505050565b6001600160a01b0381165f90815260cb602052604090208054600181018255905b50919050565b5f54610100900460ff16611a3f5760405162461bcd60e51b8152600401610773906129e4565b6108e0612414565b5f54610100900460ff16611a6d5760405162461bcd60e51b8152600401610773906129e4565b6106c68282612443565b5f54610100900460ff16611a9d5760405162461bcd60e51b8152600401610773906129e4565b61082981604051806040016040528060018152602001603160f81b815250612482565b610130544211611b97576001600160a01b0383165f908152610131602052604090205460ff1680611b0957506001600160a01b0382165f908152610132602052604090205460ff165b80611b1b57506001600160a01b038316155b611b975760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a401610773565b505050565b6001600160a01b038381165f90815260fe6020526040808220548584168352912054611b97929182169116836120d4565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bf76124cf565b611bff612527565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f815f03611c4f57505f919050565b5f6001611c5b84612557565b901c6001901b90506001818481611c7457611c74612a2f565b048201901c90506001818481611c8c57611c8c612a2f565b048201901c90506001818481611ca457611ca4612a2f565b048201901c90506001818481611cbc57611cbc612a2f565b048201901c90506001818481611cd457611cd4612a2f565b048201901c90506001818481611cec57611cec612a2f565b048201901c90506001818481611d0457611d04612a2f565b048201901c905061079d81828581611d1e57611d1e612a2f565b046125ea565b5f611d326002848418612a43565b61079d90848416612996565b6001600160a01b038216611d945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610773565b611d9f5f8383611ac0565b8060675f828254611db09190612996565b90915550506001600160a01b0382165f818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106c65f8383611b9c565b5f61079d8284612996565b82545f908190818115611e64575f8781526020902082015f190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611e78565b604080518082019091525f80825260208201525b905080602001516001600160e01b03169350611e9884868863ffffffff16565b92505f82118015611ec05750611eac6109ff565b65ffffffffffff16815f015163ffffffff16145b15611f0357611ece836125ff565b5f8881526020902083015f190180546001600160e01b03929092166401000000000263ffffffff909216919091179055611f7c565b866040518060400160405280611f27611f1a6109ff565b65ffffffffffff1661180b565b63ffffffff168152602001611f3b866125ff565b6001600160e01b0390811690915282546001810184555f938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6001600160a01b038216611fe65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610773565b611ff1825f83611ac0565b6001600160a01b0382165f90815260656020526040902054818110156120645760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610773565b6001600160a01b0383165f8181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611b97835f84611b9c565b5f61079d82846129d1565b816001600160a01b0316836001600160a01b0316141580156120f557505f81115b15611b97576001600160a01b03831615612182576001600160a01b0383165f90815260ff60205260408120819061212f906120c985611e1a565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612177929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611b97576001600160a01b0382165f90815260ff6020526040812081906121b790611e0f85611e1a565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516121ff929190918252602082015260400190565b60405180910390a25050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561224357505f905060036122c2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612294573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166122bc575f600192509250506122c2565b91505f90505b94509492505050565b5f8160048111156122de576122de612a62565b036122e65750565b60018160048111156122fa576122fa612a62565b036123475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610773565b600281600481111561235b5761235b612a62565b036123a85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610773565b60038160048111156123bc576123bc612a62565b036108295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610773565b5f54610100900460ff1661243a5760405162461bcd60e51b8152600401610773906129e4565b6108e033611873565b5f54610100900460ff166124695760405162461bcd60e51b8152600401610773906129e4565b60686124758382612ac1565b506069611b978282612ac1565b5f54610100900460ff166124a85760405162461bcd60e51b8152600401610773906129e4565b60996124b48382612ac1565b50609a6124c18282612ac1565b50505f609781905560985550565b5f5f6124d96118c4565b8051909150156124f0578051602090910120919050565b60975480156124ff5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f6125316118d3565b805190915015612548578051602090910120919050565b60985480156124ff5792915050565b5f80608083901c1561256b57608092831c92015b604083901c1561257d57604092831c92015b602083901c1561258f57602092831c92015b601083901c156125a157601092831c92015b600883901c156125b357600892831c92015b600483901c156125c557600492831c92015b600283901c156125d757600292831c92015b600183901c156106ae5760010192915050565b5f8183106125f8578161079d565b5090919050565b5f6001600160e01b0382111561186f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610773565b80356001600160a01b038116811461267d575f5ffd5b919050565b5f60208284031215612692575f5ffd5b61079d82612667565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61079d602083018461269b565b5f5f604083850312156126ec575f5ffd5b6126f583612667565b946020939093013593505050565b5f5f60408385031215612714575f5ffd5b61271d83612667565b915060208301358015158114612731575f5ffd5b809150509250929050565b5f5f5f6060848603121561274e575f5ffd5b61275784612667565b925061276560208501612667565b929592945050506040919091013590565b5f60208284031215612786575f5ffd5b5035919050565b60ff60f81b8816815260e060208201525f6127ab60e083018961269b565b82810360408401526127bd818961269b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156128125783518352602093840193909201916001016127f4565b50909b9a5050505050505050505050565b803560ff8116811461267d575f5ffd5b5f5f5f5f5f5f60c08789031215612848575f5ffd5b61285187612667565b9550602087013594506040870135935061286d60608801612823565b9598949750929560808101359460a0909101359350915050565b5f5f5f5f5f5f5f60e0888a03121561289d575f5ffd5b6128a688612667565b96506128b460208901612667565b955060408801359450606088013593506128d060808901612823565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156128fe575f5ffd5b61290783612667565b915061291560208401612667565b90509250929050565b5f5f6040838503121561292f575f5ffd5b61293883612667565b9150602083013563ffffffff81168114612731575f5ffd5b600181811c9082168061296457607f821691505b602082108103611a1357634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106ae576106ae612982565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156106ae576106ae612982565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612a5d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52602160045260245ffd5b601f821115611b9757805f5260205f20601f840160051c81016020851015612a9b5750805b601f840160051c820191505b81811015612aba575f8155600101612aa7565b5050505050565b815167ffffffffffffffff811115612adb57612adb6129a9565b612aef81612ae98454612950565b84612a76565b6020601f821160018114612b21575f8315612b0a5750848201515b5f19600385901b1c1916600184901b178455612aba565b5f84815260208120601f198516915b82811015612b505787850151825560209485019460019092019101612b30565b5084821015612b6d57868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220e63487e41f434068c326685f38f3b42cae05dc5f424d3b54b53460214543d28764736f6c634300081b0033", + Bin: "0x60a060405234801561000f575f5ffd5b50604051612d11380380612d1183398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b608051612bb261015f5f395f81816105e901528181610dae01528181610dd90152610e040152612bb25ff3fe608060405234801561000f575f5ffd5b506004361061023f575f3560e01c80637ecebe0011610135578063aa271e1a116100b4578063dd62ed3e11610079578063dd62ed3e14610579578063eb415f451461058c578063f1127ed814610594578063f2fde38b146105d1578063fdc371ce146105e4575f5ffd5b8063aa271e1a1461050a578063b8c255941461052d578063c3cda52014610540578063c4d66de814610553578063d505accf14610566575f5ffd5b806395d89b41116100fa57806395d89b41146104bf5780639ab24eb0146104c75780639aec4bae146104da578063a457c2d7146104e4578063a9059cbb146104f7575f5ffd5b80637ecebe001461044e57806384b0196e146104615780638da5cb5b1461047c5780638e539e8c1461048d57806391ddadf4146104a0575f5ffd5b806340c10f19116101c157806366eb399f1161018657806366eb399f146103c05780636fcfff45146103d357806370a08231146103fb578063715018a61461042357806378aa33ba1461042b575f5ffd5b806340c10f191461031a57806342966c681461032d5780634bf5d7e914610340578063587cde1e1461036a5780635c19a95c146103ad575f5ffd5b806323b872dd1161020757806323b872dd146102ca578063313ce567146102dd5780633644e515146102ec57806339509351146102f45780633a46b1a814610307575f5ffd5b80630455e6941461024357806306fdde031461027b578063095ea7b31461029057806318160ddd146102a35780631ffacdef146102b5575b5f5ffd5b610266610251366004612682565b6101316020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61028361060b565b60405161027291906126c9565b61026661029e3660046126db565b61069b565b6067545b604051908152602001610272565b6102c86102c3366004612703565b6106b4565b005b6102666102d836600461273c565b6106ca565b60405160128152602001610272565b6102a76106ed565b6102666103023660046126db565b6106fb565b6102a76103153660046126db565b61071c565b6102c86103283660046126db565b6107a4565b6102c861033b366004612776565b61081f565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b6020820152610283565b610395610378366004612682565b6001600160a01b039081165f90815260fe60205260409020541690565b6040516001600160a01b039091168152602001610272565b6102c86103bb366004612682565b61082c565b6102c86103ce366004612703565b610836565b6103e66103e1366004612682565b6108ae565b60405163ffffffff9091168152602001610272565b6102a7610409366004612682565b6001600160a01b03165f9081526065602052604090205490565b6102c86108cf565b610266610439366004612682565b6101326020525f908152604090205460ff1681565b6102a761045c366004612682565b6108e2565b6104696108ff565b604051610272979695949392919061278d565b6033546001600160a01b0316610395565b6102a761049b366004612776565b610998565b6104a86109ff565b60405165ffffffffffff9091168152602001610272565b610283610a09565b6102a76104d5366004612682565b610a18565b6102a76101305481565b6102666104f23660046126db565b610a95565b6102666105053660046126db565b610b0f565b610266610518366004612682565b6101336020525f908152604090205460ff1681565b6102c861053b366004612703565b610b1c565b6102c861054e366004612833565b610b2e565b6102c8610561366004612682565b610c63565b6102c8610574366004612887565b610ea5565b6102a76105873660046128ed565b611006565b6102c8611030565b6105a76105a236600461291e565b6110fe565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610272565b6102c86105df366004612682565b61117f565b6103957f000000000000000000000000000000000000000000000000000000000000000081565b60606068805461061a90612950565b80601f016020809104026020016040519081016040528092919081815260200182805461064690612950565b80156106915780601f1061066857610100808354040283529160200191610691565b820191905f5260205f20905b81548152906001019060200180831161067457829003601f168201915b5050505050905090565b5f336106a88185856111f5565b60019150505b92915050565b6106bc611318565b6106c68282611372565b5050565b5f336106d78582856113d2565b6106e285858561144a565b506001949350505050565b5f6106f6611604565b905090565b5f336106a881858561070d8383611006565b6107179190612996565b6111f5565b5f6107256109ff565b65ffffffffffff16821061077c5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b0383165f90815260ff6020526040902061079d908361160d565b9392505050565b335f908152610133602052604090205460ff166108155760405162461bcd60e51b815260206004820152602960248201527f4261636b696e67456967656e2e6d696e743a2063616c6c6572206973206e6f7460448201526810309036b4b73a32b960b91b6064820152608401610773565b6106c682826116ee565b6108293382611779565b50565b6108293382611792565b61083e611318565b816001600160a01b03167f0124b12503bddc2616c0f3f54fd23ed283f5ef0c1483a75409e42612176b8bde8260405161087b911515815260200190565b60405180910390a26001600160a01b03919091165f90815261013360205260409020805460ff1916911515919091179055565b6001600160a01b0381165f90815260ff60205260408120546106ae9061180b565b6108d7611318565b6108e05f611873565b565b6001600160a01b0381165f90815260cb60205260408120546106ae565b5f6060805f5f5f60606097545f5f1b14801561091b5750609854155b61095f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610773565b6109676118c4565b61096f6118d3565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f6109a16109ff565b65ffffffffffff1682106109f35760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610773565b6106ae6101008361160d565b5f6106f6426118e2565b60606069805461061a90612950565b6001600160a01b0381165f90815260ff60205260408120548015610a83576001600160a01b0383165f90815260ff6020526040902080545f198301908110610a6257610a626129bd565b5f9182526020909120015464010000000090046001600160e01b0316610a85565b5f5b6001600160e01b03169392505050565b5f3381610aa28286611006565b905083811015610b025760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610773565b6106e282868684036111f5565b5f336106a881858561144a565b610b24611318565b6106c68282611948565b83421115610b7e5760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610773565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f90610bf790610bef9060a001604051602081830303815290604052805190602001206119a0565b8585856119cc565b9050610c02816119f2565b8614610c505760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610773565b610c5a8188611792565b50505050505050565b5f54610100900460ff1615808015610c8157505f54600160ff909116105b80610c9a5750303b158015610c9a57505f5460ff166001145b610cfd5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610773565b5f805460ff191660011790558015610d1e575f805461ff0019166101001790555b610d26611a19565b610d736040518060400160405280600d81526020016c2130b1b5b4b7339022b4b3b2b760991b815250604051806040016040528060068152602001653122a4a3a2a760d11b815250611a47565b610d7c82611873565b610da3604051806040016040528060068152602001653122a4a3a2a760d11b815250611a77565b5f1961013055610dd47f00000000000000000000000000000000000000000000000000000000000000006001611372565b610dff7f00000000000000000000000000000000000000000000000000000000000000006001611948565b610e357f00000000000000000000000000000000000000000000000000000000000000006b05686877afb5cbccbf7340006116ee565b6040517fb7c23c1e2e36f298e9879a88ecfcd07e28fbb439bcfa9c78ca1363ca14370d26905f90a180156106c6575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b83421115610ef55760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610773565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f238c6119f2565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f610f7d826119a0565b90505f610f8c828787876119cc565b9050896001600160a01b0316816001600160a01b031614610fef5760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610773565b610ffa8a8a8a6111f5565b50505050505050505050565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205490565b611038611318565b5f1961013054146110ce5760405162461bcd60e51b815260206004820152605460248201527f4261636b696e67456967656e2e64697361626c655472616e736665725265737460448201527f72696374696f6e733a207472616e73666572207265737472696374696f6e7320606482015273185c9948185b1c9958591e48191a5cd8589b195960621b608482015260a401610773565b5f6101308190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b604080518082019091525f80825260208201526001600160a01b0383165f90815260ff60205260409020805463ffffffff8416908110611140576111406129bd565b5f9182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b611187611318565b6001600160a01b0381166111ec5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610773565b61082981611873565b6001600160a01b0383166112575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610773565b6001600160a01b0382166112b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610773565b6001600160a01b038381165f8181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6033546001600160a01b031633146108e05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610773565b6001600160a01b0382165f8181526101316020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b5f6113dd8484611006565b90505f19811461144457818110156114375760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610773565b61144484848484036111f5565b50505050565b6001600160a01b0383166114ae5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610773565b6001600160a01b0382166115105760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610773565b61151b838383611ac0565b6001600160a01b0383165f90815260656020526040902054818110156115925760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610773565b6001600160a01b038085165f8181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906115f19086815260200190565b60405180910390a3611444848484611b9c565b5f6106f6611bcd565b81545f9081816005811115611664575f61162684611c40565b61163090856129d1565b5f88815260209020909150869082015463ffffffff16111561165457809150611662565b61165f816001612996565b92505b505b808210156116af575f6116778383611d24565b5f88815260209020909150869082015463ffffffff16111561169b578091506116a9565b6116a6816001612996565b92505b50611664565b80156116d9575f8681526020902081015f19015464010000000090046001600160e01b03166116db565b5f5b6001600160e01b03169695505050505050565b6116f88282611d3e565b6067546001600160e01b03101561176a5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610773565b611444610100611e0f83611e1a565b6117838282611f86565b6114446101006120c983611e1a565b6001600160a01b038281165f81815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46114448284836120d4565b5f63ffffffff82111561186f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610773565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606099805461061a90612950565b6060609a805461061a90612950565b5f65ffffffffffff82111561186f5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610773565b6001600160a01b0382165f8181526101326020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b91016113c6565b5f6106ae6119ac611604565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f6119db8787878761220e565b915091506119e8816122cb565b5095945050505050565b6001600160a01b0381165f90815260cb602052604090208054600181018255905b50919050565b5f54610100900460ff16611a3f5760405162461bcd60e51b8152600401610773906129e4565b6108e0612414565b5f54610100900460ff16611a6d5760405162461bcd60e51b8152600401610773906129e4565b6106c68282612443565b5f54610100900460ff16611a9d5760405162461bcd60e51b8152600401610773906129e4565b61082981604051806040016040528060018152602001603160f81b815250612482565b610130544211611b97576001600160a01b0383165f908152610131602052604090205460ff1680611b0957506001600160a01b0382165f908152610132602052604090205460ff165b80611b1b57506001600160a01b038316155b611b975760405162461bcd60e51b815260206004820152604160248201527f4261636b696e67456967656e2e5f6265666f7265546f6b656e5472616e73666560448201527f723a2066726f6d206f7220746f206d7573742062652077686974656c697374656064820152601960fa1b608482015260a401610773565b505050565b6001600160a01b038381165f90815260fe6020526040808220548584168352912054611b97929182169116836120d4565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611bf76124cf565b611bff612527565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f815f03611c4f57505f919050565b5f6001611c5b84612557565b901c6001901b90506001818481611c7457611c74612a2f565b048201901c90506001818481611c8c57611c8c612a2f565b048201901c90506001818481611ca457611ca4612a2f565b048201901c90506001818481611cbc57611cbc612a2f565b048201901c90506001818481611cd457611cd4612a2f565b048201901c90506001818481611cec57611cec612a2f565b048201901c90506001818481611d0457611d04612a2f565b048201901c905061079d81828581611d1e57611d1e612a2f565b046125ea565b5f611d326002848418612a43565b61079d90848416612996565b6001600160a01b038216611d945760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610773565b611d9f5f8383611ac0565b8060675f828254611db09190612996565b90915550506001600160a01b0382165f818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36106c65f8383611b9c565b5f61079d8284612996565b82545f908190818115611e64575f8781526020902082015f190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152611e78565b604080518082019091525f80825260208201525b905080602001516001600160e01b03169350611e9884868863ffffffff16565b92505f82118015611ec05750611eac6109ff565b65ffffffffffff16815f015163ffffffff16145b15611f0357611ece836125ff565b5f8881526020902083015f190180546001600160e01b03929092166401000000000263ffffffff909216919091179055611f7c565b866040518060400160405280611f27611f1a6109ff565b65ffffffffffff1661180b565b63ffffffff168152602001611f3b866125ff565b6001600160e01b0390811690915282546001810184555f938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b6001600160a01b038216611fe65760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610773565b611ff1825f83611ac0565b6001600160a01b0382165f90815260656020526040902054818110156120645760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610773565b6001600160a01b0383165f8181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611b97835f84611b9c565b5f61079d82846129d1565b816001600160a01b0316836001600160a01b0316141580156120f557505f81115b15611b97576001600160a01b03831615612182576001600160a01b0383165f90815260ff60205260408120819061212f906120c985611e1a565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612177929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611b97576001600160a01b0382165f90815260ff6020526040812081906121b790611e0f85611e1a565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516121ff929190918252602082015260400190565b60405180910390a25050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561224357505f905060036122c2565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612294573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166122bc575f600192509250506122c2565b91505f90505b94509492505050565b5f8160048111156122de576122de612a62565b036122e65750565b60018160048111156122fa576122fa612a62565b036123475760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610773565b600281600481111561235b5761235b612a62565b036123a85760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610773565b60038160048111156123bc576123bc612a62565b036108295760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610773565b5f54610100900460ff1661243a5760405162461bcd60e51b8152600401610773906129e4565b6108e033611873565b5f54610100900460ff166124695760405162461bcd60e51b8152600401610773906129e4565b60686124758382612ac1565b506069611b978282612ac1565b5f54610100900460ff166124a85760405162461bcd60e51b8152600401610773906129e4565b60996124b48382612ac1565b50609a6124c18282612ac1565b50505f609781905560985550565b5f5f6124d96118c4565b8051909150156124f0578051602090910120919050565b60975480156124ff5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f6125316118d3565b805190915015612548578051602090910120919050565b60985480156124ff5792915050565b5f80608083901c1561256b57608092831c92015b604083901c1561257d57604092831c92015b602083901c1561258f57602092831c92015b601083901c156125a157601092831c92015b600883901c156125b357600892831c92015b600483901c156125c557600492831c92015b600283901c156125d757600292831c92015b600183901c156106ae5760010192915050565b5f8183106125f8578161079d565b5090919050565b5f6001600160e01b0382111561186f5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610773565b80356001600160a01b038116811461267d575f5ffd5b919050565b5f60208284031215612692575f5ffd5b61079d82612667565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61079d602083018461269b565b5f5f604083850312156126ec575f5ffd5b6126f583612667565b946020939093013593505050565b5f5f60408385031215612714575f5ffd5b61271d83612667565b915060208301358015158114612731575f5ffd5b809150509250929050565b5f5f5f6060848603121561274e575f5ffd5b61275784612667565b925061276560208501612667565b929592945050506040919091013590565b5f60208284031215612786575f5ffd5b5035919050565b60ff60f81b8816815260e060208201525f6127ab60e083018961269b565b82810360408401526127bd818961269b565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156128125783518352602093840193909201916001016127f4565b50909b9a5050505050505050505050565b803560ff8116811461267d575f5ffd5b5f5f5f5f5f5f60c08789031215612848575f5ffd5b61285187612667565b9550602087013594506040870135935061286d60608801612823565b9598949750929560808101359460a0909101359350915050565b5f5f5f5f5f5f5f60e0888a03121561289d575f5ffd5b6128a688612667565b96506128b460208901612667565b955060408801359450606088013593506128d060808901612823565b9699959850939692959460a0840135945060c09093013592915050565b5f5f604083850312156128fe575f5ffd5b61290783612667565b915061291560208401612667565b90509250929050565b5f5f6040838503121561292f575f5ffd5b61293883612667565b9150602083013563ffffffff81168114612731575f5ffd5b600181811c9082168061296457607f821691505b602082108103611a1357634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156106ae576106ae612982565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156106ae576106ae612982565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612a5d57634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52602160045260245ffd5b601f821115611b9757805f5260205f20601f840160051c81016020851015612a9b5750805b601f840160051c820191505b81811015612aba575f8155600101612aa7565b5050505050565b815167ffffffffffffffff811115612adb57612adb6129a9565b612aef81612ae98454612950565b84612a76565b6020601f821160018114612b21575f8315612b0a5750848201515b5f19600385901b1c1916600184901b178455612aba565b5f84815260208120601f198516915b82811015612b505787850151825560209485019460019092019101612b30565b5084821015612b6d57868401515f19600387901b60f8161c191681555b50505050600190811b0190555056fea26469706673582212202b65c0f0414f6ef22efd02333f38dacaf689c6212f55c8f410b6b3d8607f907c64736f6c634300081e0033", } // BackingEigenABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/BeaconChainProofs/binding.go b/pkg/bindings/BeaconChainProofs/binding.go index 22805f8d05..c79dcf114d 100644 --- a/pkg/bindings/BeaconChainProofs/binding.go +++ b/pkg/bindings/BeaconChainProofs/binding.go @@ -32,7 +32,7 @@ var ( // BeaconChainProofsMetaData contains all meta data concerning the BeaconChainProofs contract. var BeaconChainProofsMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220cfd005b54745fb0d52f5e3c6372cc0e327e7723423384b9d650e2e00dfe5f5cc64736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220da9f3713f090e9533103aff767c4c0b23e30d530dc2a365abc648e56fee6581f64736f6c634300081e0033", } // BeaconChainProofsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/CrossChainRegistry/binding.go b/pkg/bindings/CrossChainRegistry/binding.go index e2dd1a0d5d..c8cb6eda46 100644 --- a/pkg/bindings/CrossChainRegistry/binding.go +++ b/pkg/bindings/CrossChainRegistry/binding.go @@ -43,8 +43,8 @@ type OperatorSet struct { // CrossChainRegistryMetaData contains all meta data concerning the CrossChainRegistry contract. var CrossChainRegistryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_keyRegistrar\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addChainIDsToWhitelist\",\"inputs\":[{\"name\":\"chainIDs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"operatorTableUpdaters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservationCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservations\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservationsByRange\",\"inputs\":[{\"name\":\"startIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"endIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTableUpdateCadence\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasActiveGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialTableUpdateCadence\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"keyRegistrar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeChainIDsFromWhitelist\",\"inputs\":[{\"name\":\"chainIDs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setTableUpdateCadence\",\"inputs\":[{\"name\":\"tableUpdateCadence\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"ChainIDAddedToWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorTableUpdater\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainIDRemovedFromWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorTableCalculatorRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorTableCalculatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIOperatorTableCalculator\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdateCadenceSet\",\"inputs\":[{\"name\":\"tableUpdateCadence\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainIDAlreadyWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainIDNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyChainIDsArray\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GenerationReservationAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GenerationReservationDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEndIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStalenessPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTableUpdateCadence\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyTypeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610120604052348015610010575f5ffd5b5060405161281438038061281483398101604081905261002f916101c1565b80838686856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a052811660c0521660e05261008181610098565b610100525061008e6100de565b5050505050610319565b5f5f829050601f815111156100cb578260405163305a27a960e01b81526004016100c291906102be565b60405180910390fd5b80516100d6826102f3565b179392505050565b5f54610100900460ff16156101455760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c2565b5f5460ff90811614610194575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101aa575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d5575f5ffd5b85516101e081610196565b60208701519095506101f181610196565b604087015190945061020281610196565b606087015190935061021381610196565b60808701519092506001600160401b0381111561022e575f5ffd5b8601601f8101881361023e575f5ffd5b80516001600160401b03811115610257576102576101ad565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610285576102856101ad565b6040528181528282016020018a101561029c575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610313575f198160200360031b1b821691505b50919050565b60805160a05160c05160e0516101005161247f6103955f395f610b7201525f81816102e601526117d701525f818161028701528181610a29015261112201525f81816103ee015281816107920152818161092201528181610c05015261107901525f81816103800152818161170b0152611a9b015261247f5ff3fe608060405234801561000f575f5ffd5b50600436106101d1575f3560e01c8063715018a6116100fe578063ca8aa7c71161009e578063d9a6729e1161006e578063d9a6729e1461044b578063dfbd9dfd1461045e578063f2fde38b14610471578063fabc1cbc14610484575f5ffd5b8063ca8aa7c7146103e9578063d09b978b14610410578063d504491114610425578063d6db9e2514610438575f5ffd5b80638da5cb5b116100d95780638da5cb5b146103a2578063ac505f4b146103b3578063b186a60e146103cb578063c4bffe2b146103d3575f5ffd5b8063715018a61461036057806375e4b53914610368578063886f11951461037b575f5ffd5b80633ec45c7e11610174578063595c6a6711610144578063595c6a67146103105780635ac86ab7146103185780635c975abb1461033b5780636c55a37f1461034d575f5ffd5b80633ec45c7e1461028257806341ee6d0e146102c15780634657e26a146102e157806354fd4d5014610308575f5ffd5b80631ca9142a116101af5780631ca9142a1461021057806321fa7fdc14610223578063277e1e621461024c57806336b200de1461025f575f5ffd5b806304e98be3146101d55780630f19aaef146101ea578063136439dd146101fd575b5f5ffd5b6101e86101e3366004611d72565b610497565b005b6101e86101f8366004611e0a565b6105db565b6101e861020b366004611e46565b610701565b6101e861021e366004611e73565b61073b565b610236610231366004611f4c565b61086b565b6040516102439190611f84565b60405180910390f35b6101e861025a366004611f92565b6108cb565b61027261026d366004611f4c565b610a09565b6040519015158152602001610243565b6102a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610243565b6102d46102cf366004611fc5565b610a24565b604051610243919061200d565b6102a97f000000000000000000000000000000000000000000000000000000000000000081565b6102d4610b6b565b6101e8610b9b565b61027261032636600461201f565b606654600160ff9092169190911b9081161490565b6066545b604051908152602001610243565b6101e861035b366004611fc5565b610baf565b6101e8610dd2565b6102a9610376366004611f4c565b610de3565b6102a97f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b03166102a9565b609e5460405163ffffffff9091168152602001610243565b61033f610e0f565b6103db610e1a565b60405161024392919061203f565b6102a97f000000000000000000000000000000000000000000000000000000000000000081565b610418610f30565b60405161024391906120c8565b6101e8610433366004612115565b611023565b6101e8610446366004612159565b611269565b610418610459366004612172565b61127d565b6101e861046c366004612192565b6113c7565b6101e861047f3660046121d1565b61146d565b6101e8610492366004611e46565b6114e3565b61049f611550565b60036104aa816115aa565b8382146104ca5760405163512509d360e11b815260040160405180910390fd5b5f5b848110156105d3575f8686838181106104e7576104e76121ec565b905060200201359050805f0361051057604051633d23e4d160e11b815260040160405180910390fd5b61054481868685818110610526576105266121ec565b905060200201602081019061053b91906121d1565b609b91906115d5565b610561576040516324bf631b60e11b815260040160405180910390fd5b7f7a0a76d85b582b17996dd7371a407aa7a79b870db8539247fba315c7b6beff6281868685818110610595576105956121ec565b90506020020160208101906105aa91906121d1565b604080519283526001600160a01b0390911660208301520160405180910390a1506001016104cc565b505050505050565b5f54610100900460ff16158080156105f957505f54600160ff909116105b806106125750303b15801561061257505f5460ff166001145b61067a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561069b575f805461ff0019166101001790555b6106a4846115f4565b6106ad83611645565b6106b6826116b9565b80156106fb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6107096116f6565b606654818116811461072e5760405163c61dca5d60e01b815260040160405180910390fd5b610737826116b9565b5050565b6001610746816115aa565b61075360208401846121d1565b61075c81611799565b6107795760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b815284906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc758906107c7908490600401612231565b602060405180830381865afa1580156107e2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610806919061223f565b61082357604051631fb1705560e21b815260040160405180910390fd5b8461083661026d36839003830183611f4c565b61085357604051634d2baea960e11b815260040160405180910390fd5b6105d361086536889003880188611f4c565b86611843565b604080518082019091525f8082526020820152609a5f61088a846118bd565b815260208082019290925260409081015f208151808301909252546001600160a01b0381168252600160a01b900463ffffffff169181019190915292915050565b60026108d6816115aa565b6108e360208401846121d1565b6108ec81611799565b6109095760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b815284906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610957908490600401612231565b602060405180830381865afa158015610972573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610996919061223f565b6109b357604051631fb1705560e21b815260040160405180910390fd5b846109c661026d36839003830183611f4c565b6109e357604051634d2baea960e11b815260040160405180910390fd5b6105d36109f536889003880188611f4c565b610a0436889003880188611f4c565b611920565b5f610a1e610a16836118bd565b6097906119e9565b92915050565b6060817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637cffe48c846040518263ffffffff1660e01b8152600401610a739190612231565b602060405180830381865afa158015610a8e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab2919061225e565b610ac461023136869003860186611f4c565b610ad661037636879003870187611f4c565b6001600160a01b03166341ee6d0e866040518263ffffffff1660e01b8152600401610b019190612231565b5f60405180830381865afa158015610b1b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b42919081019061227c565b604051602001610b559493929190612324565b6040516020818303038152906040529050919050565b6060610b967f0000000000000000000000000000000000000000000000000000000000000000611a00565b905090565b610ba36116f6565b610bad5f196116b9565b565b5f610bb9816115aa565b610bc660208301836121d1565b610bcf81611799565b610bec5760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b815283906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610c3a908490600401612231565b602060405180830381865afa158015610c55573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c79919061223f565b610c9657604051631fb1705560e21b815260040160405180910390fd5b83610ca961026d36839003830183611f4c565b610cc657604051634d2baea960e11b815260040160405180910390fd5b5f610cde610cd936889003880188611f4c565b6118bd565b5f818152609960205260409081902080546001600160a01b0319169055519091507fd7811913efd5d98fc7ea0d1fdd022b3d31987815360842d05b1d1cf55578d16a90610d2c908890612231565b60405180910390a15f818152609a60205260409081902080546001600160c01b0319169055517f210a1118a869246162804e2a7f21ef808ebd93f4be7ed512014fe29a7a8be02e90610d7f908890612231565b60405180910390a1610d92609782611a3d565b507f4ffdfdd59e9e1e3c301608788f78dd458e61cb8c045ca92b62a7b484c80824fb86604051610dc29190612231565b60405180910390a1505050505050565b610dda611550565b610bad5f6115f4565b5f60995f610df0846118bd565b815260208101919091526040015f20546001600160a01b031692915050565b5f610b966097611a48565b6060805f610e28609b611a51565b90505f8167ffffffffffffffff811115610e4457610e44611ea9565b604051908082528060200260200182016040528015610e6d578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610e8a57610e8a611ea9565b604051908082528060200260200182016040528015610eb3578160200160208202803683370190505b5090505f5b83811015610f25575f80610ecd609b84611a5b565b9150915081858481518110610ee457610ee46121ec565b60200260200101818152505080848481518110610f0357610f036121ec565b6001600160a01b03909216602092830291909101909101525050600101610eb8565b509094909350915050565b60605f610f3d6097611a48565b90505f8167ffffffffffffffff811115610f5957610f59611ea9565b604051908082528060200260200182016040528015610f9d57816020015b604080518082019091525f8082526020820152815260200190600190039081610f775790505b5090505f5b8281101561101c575f610fb6609783611a78565b90505f610ff282604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b905080848481518110611007576110076121ec565b60209081029190910101525050600101610fa2565b5092915050565b5f61102d816115aa565b61103a60208501856121d1565b61104381611799565b6110605760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b815285906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc758906110ae908490600401612231565b602060405180830381865afa1580156110c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110ed919061223f565b61110a57604051631fb1705560e21b815260040160405180910390fd5b5f604051631f3ff92360e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cffe48c90611157908a90600401612231565b602060405180830381865afa158015611172573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611196919061225e565b60028111156111a7576111a7612310565b036111c55760405163e57cacbd60e01b815260040160405180910390fd5b6111e26111da610cd936899003890189611f4c565b609790611a83565b6111ff57604051631883461560e01b815260040160405180910390fd5b7f4fb6efec7dd60036ce3a7af8d5c48425019daa0fb61eb471a966a7ac2c6fa6a68660405161122e9190612231565b60405180910390a161124861086536889003880188611f4c565b6105d361125a36889003880188611f4c565b610a0436879003870187611f4c565b611271611550565b61127a81611645565b50565b6060818311156112a05760405163561ce9bb60e01b815260040160405180910390fd5b6112aa6097611a48565b8211156112ca576040516302da361360e61b815260040160405180910390fd5b5f6112d58484612390565b90505f8167ffffffffffffffff8111156112f1576112f1611ea9565b60405190808252806020026020018201604052801561133557816020015b604080518082019091525f808252602082015281526020019060019003908161130f5790505b5090505f5b828110156113be575f61135861135083896123a3565b609790611a78565b90505f61139482604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b9050808484815181106113a9576113a96121ec565b6020908102919091010152505060010161133a565b50949350505050565b6113cf611550565b60036113da816115aa565b5f5b828110156106fb575f8484838181106113f7576113f76121ec565b90506020020135905061141481609b611a8e90919063ffffffff16565b6114315760405163b3f92ba160e01b815260040160405180910390fd5b6040518181527f6824d36084ecf2cd819b137cb5d837cc6e73afce1e0e348c9fdecaa81d0341e59060200160405180910390a1506001016113dc565b611475611550565b6001600160a01b0381166114da5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610671565b61127a816115f4565b6114eb611a99565b606654801982198116146115125760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b6033546001600160a01b03163314610bad5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610671565b606654600160ff83161b9081160361127a5760405163840a48d560e01b815260040160405180910390fd5b5f6115ea84846001600160a01b038516611b4a565b90505b9392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8163ffffffff161161166b576040516316d98e1b60e31b815260040160405180910390fd5b609e805463ffffffff191663ffffffff83169081179091556040519081527f4fbcd0cca70015b33db8af4aa4f2bd6fd6c1efa9460b8e2333f252c1467a63279060200160405180910390a150565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611758573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177c919061223f565b610bad57604051631d77d47760e21b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af115801561181f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a1e919061223f565b8060995f611850856118bd565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f7f7ccafd92d20fdb39dee184a0dce002a9da420ed0def461f2a027abc9b3f6df82826040516118b19291906123b6565b60405180910390a15050565b5f815f0151826020015163ffffffff1660405160200161190892919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610a1e906123dc565b602081015163ffffffff1615806119475750609e54602082015163ffffffff918216911610155b61196457604051632e46483160e11b815260040160405180910390fd5b80609a5f611971856118bd565b815260208082019290925260409081015f2083518154949093015163ffffffff16600160a01b026001600160c01b03199094166001600160a01b0390931692909217929092179055517f3147846ee526009000671c20380b856a633345691300f82585f90034715cf0e2906118b190849084906123ff565b5f81815260018301602052604081205415156115ed565b60605f611a0c83611b66565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6115ed8383611b8d565b5f610a1e825490565b5f610a1e82611c70565b5f808080611a698686611c7a565b909450925050505b9250929050565b5f6115ed8383611ca3565b5f6115ed8383611cc9565b5f6115ed8383611d15565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b19919061241a565b6001600160a01b0316336001600160a01b031614610bad5760405163794821ff60e01b815260040160405180910390fd5b5f82815260028401602052604081208290556115ea8484611a83565b5f60ff8216601f811115610a1e57604051632cd44ac360e21b815260040160405180910390fd5b5f8181526001830160205260408120548015611c67575f611baf600183612390565b85549091505f90611bc290600190612390565b9050818114611c21575f865f018281548110611be057611be06121ec565b905f5260205f200154905080875f018481548110611c0057611c006121ec565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611c3257611c32612435565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610a1e565b5f915050610a1e565b5f610a1e82611a48565b5f8080611c878585611a78565b5f81815260029690960160205260409095205494959350505050565b5f825f018281548110611cb857611cb86121ec565b905f5260205f200154905092915050565b5f818152600183016020526040812054611d0e57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610a1e565b505f610a1e565b5f81815260028301602052604081208190556115ed8383611a3d565b5f5f83601f840112611d41575f5ffd5b50813567ffffffffffffffff811115611d58575f5ffd5b6020830191508360208260051b8501011115611a71575f5ffd5b5f5f5f5f60408587031215611d85575f5ffd5b843567ffffffffffffffff811115611d9b575f5ffd5b611da787828801611d31565b909550935050602085013567ffffffffffffffff811115611dc6575f5ffd5b611dd287828801611d31565b95989497509550505050565b6001600160a01b038116811461127a575f5ffd5b803563ffffffff81168114611e05575f5ffd5b919050565b5f5f5f60608486031215611e1c575f5ffd5b8335611e2781611dde565b9250611e3560208501611df2565b929592945050506040919091013590565b5f60208284031215611e56575f5ffd5b5035919050565b5f60408284031215611e6d575f5ffd5b50919050565b5f5f60608385031215611e84575f5ffd5b611e8e8484611e5d565b91506040830135611e9e81611dde565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611ee657611ee6611ea9565b604052919050565b5f60408284031215611efe575f5ffd5b6040805190810167ffffffffffffffff81118282101715611f2157611f21611ea9565b6040529050808235611f3281611dde565b8152611f4060208401611df2565b60208201525092915050565b5f60408284031215611f5c575f5ffd5b6115ed8383611eee565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610a1e8284611f66565b5f5f60808385031215611fa3575f5ffd5b611fad8484611e5d565b9150611fbc8460408501611e5d565b90509250929050565b5f60408284031215611fd5575f5ffd5b6115ed8383611e5d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6115ed6020830184611fdf565b5f6020828403121561202f575f5ffd5b813560ff811681146115ed575f5ffd5b604080825283519082018190525f9060208501906060840190835b8181101561207857835183526020938401939092019160010161205a565b5050838103602080860191909152855180835291810192508501905f5b818110156120bc5782516001600160a01b0316845260209384019390920191600101612095565b50919695505050505050565b602080825282518282018190525f918401906040840190835b8181101561210a576120f4838551611f66565b60209390930192604092909201916001016120e1565b509095945050505050565b5f5f5f60a08486031215612127575f5ffd5b6121318585611e5d565b9250604084013561214181611dde565b91506121508560608601611e5d565b90509250925092565b5f60208284031215612169575f5ffd5b6115ed82611df2565b5f5f60408385031215612183575f5ffd5b50508035926020909101359150565b5f5f602083850312156121a3575f5ffd5b823567ffffffffffffffff8111156121b9575f5ffd5b6121c585828601611d31565b90969095509350505050565b5f602082840312156121e1575f5ffd5b81356115ed81611dde565b634e487b7160e01b5f52603260045260245ffd5b803561220b81611dde565b6001600160a01b0316825263ffffffff61222760208301611df2565b1660208301525050565b60408101610a1e8284612200565b5f6020828403121561224f575f5ffd5b815180151581146115ed575f5ffd5b5f6020828403121561226e575f5ffd5b8151600381106115ed575f5ffd5b5f6020828403121561228c575f5ffd5b815167ffffffffffffffff8111156122a2575f5ffd5b8201601f810184136122b2575f5ffd5b805167ffffffffffffffff8111156122cc576122cc611ea9565b6122df601f8201601f1916602001611ebd565b8181528560208385010111156122f3575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b634e487b7160e01b5f52602160045260245ffd5b61232e8186612200565b5f6003851061234b57634e487b7160e01b5f52602160045260245ffd5b84604083015261235e6060830185611f66565b60c060a083015261237260c0830184611fdf565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610a1e57610a1e61237c565b80820180821115610a1e57610a1e61237c565b606081016123c48285611f66565b6001600160a01b039290921660409190910152919050565b80516020808301519190811015611e6d575f1960209190910360031b1b16919050565b6080810161240d8285611f66565b6115ed6040830184611f66565b5f6020828403121561242a575f5ffd5b81516115ed81611dde565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212204a66187c822cf8883196722425d6a199eb25caad0350f5c28fa5162b58fd508364736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_keyRegistrar\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addChainIDsToWhitelist\",\"inputs\":[{\"name\":\"chainIDs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"operatorTableUpdaters\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableBytes\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservationCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservations\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getActiveGenerationReservationsByRange\",\"inputs\":[{\"name\":\"startIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"endIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSupportedChains\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTableUpdateCadence\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasActiveGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialTableUpdateCadence\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"keyRegistrar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIKeyRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeChainIDsFromWhitelist\",\"inputs\":[{\"name\":\"chainIDs\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeGenerationReservation\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorTableCalculator\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableCalculator\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setTableUpdateCadence\",\"inputs\":[{\"name\":\"tableUpdateCadence\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ChainIDAddedToWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorTableUpdater\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ChainIDRemovedFromWhitelist\",\"inputs\":[{\"name\":\"chainID\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GenerationReservationRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorTableCalculatorRemoved\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorTableCalculatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorTableCalculator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIOperatorTableCalculator\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdateCadenceSet\",\"inputs\":[{\"name\":\"tableUpdateCadence\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainIDAlreadyWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ChainIDNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyChainIDsArray\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GenerationReservationAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GenerationReservationDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidChainId\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEndIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStalenessPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTableUpdateCadence\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyTypeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]}]", + Bin: "0x610100604052348015610010575f5ffd5b506040516125b73803806125b783398101604081905261002f9161015b565b818484836001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a052811660c0521660e05261007f610088565b505050506101b7565b5f54610100900460ff16156100f35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610142575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610158575f5ffd5b50565b5f5f5f5f6080858703121561016e575f5ffd5b845161017981610144565b602086015190945061018a81610144565b604086015190935061019b81610144565b60608601519092506101ac81610144565b939692955090935050565b60805160a05160c05160e05161238e6102295f395f81816102db0152611a3101525f818161027c015281816109dc015261107001525f81816103db01528181610762015281816108d501528181610b6b0152610fc701525f818161036d015281816116590152611928015261238e5ff3fe608060405234801561000f575f5ffd5b50600436106101c6575f3560e01c8063715018a6116100fe578063ca8aa7c71161009e578063d9a6729e1161006e578063d9a6729e14610438578063dfbd9dfd1461044b578063f2fde38b1461045e578063fabc1cbc14610471575f5ffd5b8063ca8aa7c7146103d6578063d09b978b146103fd578063d504491114610412578063d6db9e2514610425575f5ffd5b80638da5cb5b116100d95780638da5cb5b1461038f578063ac505f4b146103a0578063b186a60e146103b8578063c4bffe2b146103c0575f5ffd5b8063715018a61461034d57806375e4b53914610355578063886f119514610368575f5ffd5b80633ec45c7e11610169578063595c6a6711610144578063595c6a67146102fd5780635ac86ab7146103055780635c975abb146103285780636c55a37f1461033a575f5ffd5b80633ec45c7e1461027757806341ee6d0e146102b65780634657e26a146102d6575f5ffd5b80631ca9142a116101a45780631ca9142a1461020557806321fa7fdc14610218578063277e1e621461024157806336b200de14610254575f5ffd5b806304e98be3146101ca5780630f19aaef146101df578063136439dd146101f2575b5f5ffd5b6101dd6101d8366004611c81565b610484565b005b6101dd6101ed366004611d19565b6105c8565b6101dd610200366004611d55565b6106ee565b6101dd610213366004611d82565b610728565b61022b610226366004611e5b565b61083b565b6040516102389190611e93565b60405180910390f35b6101dd61024f366004611ea1565b61089b565b610267610262366004611e5b565b6109bc565b6040519015158152602001610238565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610238565b6102c96102c4366004611ed4565b6109d7565b6040516102389190611f1c565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6101dd610b1e565b610267610313366004611f2e565b606654600160ff9092169190911b9081161490565b6066545b604051908152602001610238565b6101dd610348366004611ed4565b610b32565b6101dd610d38565b61029e610363366004611e5b565b610d49565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b031661029e565b609e5460405163ffffffff9091168152602001610238565b61032c610d75565b6103c8610d85565b604051610238929190611f4e565b61029e7f000000000000000000000000000000000000000000000000000000000000000081565b610405610e9b565b6040516102389190611fd7565b6101dd610420366004612024565b610f8e565b6101dd610433366004612068565b6111b7565b610405610446366004612081565b6111cb565b6101dd6104593660046120a1565b611315565b6101dd61046c3660046120e0565b6113bb565b6101dd61047f366004611d55565b611431565b61048c61149e565b6003610497816114f8565b8382146104b75760405163512509d360e11b815260040160405180910390fd5b5f5b848110156105c0575f8686838181106104d4576104d46120fb565b905060200201359050805f036104fd57604051633d23e4d160e11b815260040160405180910390fd5b61053181868685818110610513576105136120fb565b905060200201602081019061052891906120e0565b609b9190611523565b61054e576040516324bf631b60e11b815260040160405180910390fd5b7f7a0a76d85b582b17996dd7371a407aa7a79b870db8539247fba315c7b6beff6281868685818110610582576105826120fb565b905060200201602081019061059791906120e0565b604080519283526001600160a01b0390911660208301520160405180910390a1506001016104b9565b505050505050565b5f54610100900460ff16158080156105e657505f54600160ff909116105b806105ff5750303b1580156105ff57505f5460ff166001145b6106675760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015610688575f805461ff0019166101001790555b61069184611542565b61069a83611593565b6106a382611607565b80156106e8575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6106f6611644565b606654818116811461071b5760405163c61dca5d60e01b815260040160405180910390fd5b61072482611607565b5050565b6001610733816114f8565b61074060208401846120e0565b610749816116e7565b6040516304c1b8eb60e31b815284906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610797908490600401612140565b602060405180830381865afa1580156107b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d6919061214e565b6107f357604051631fb1705560e21b815260040160405180910390fd5b8461080661026236839003830183611e5b565b61082357604051634d2baea960e11b815260040160405180910390fd5b6105c061083536889003880188611e5b565b8661170d565b604080518082019091525f8082526020820152609a5f61085a84611787565b815260208082019290925260409081015f208151808301909252546001600160a01b0381168252600160a01b900463ffffffff169181019190915292915050565b60026108a6816114f8565b6108b360208401846120e0565b6108bc816116e7565b6040516304c1b8eb60e31b815284906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc7589061090a908490600401612140565b602060405180830381865afa158015610925573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610949919061214e565b61096657604051631fb1705560e21b815260040160405180910390fd5b8461097961026236839003830183611e5b565b61099657604051634d2baea960e11b815260040160405180910390fd5b6105c06109a836889003880188611e5b565b6109b736889003880188611e5b565b6117ea565b5f6109d16109c983611787565b6097906118b3565b92915050565b6060817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637cffe48c846040518263ffffffff1660e01b8152600401610a269190612140565b602060405180830381865afa158015610a41573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a65919061216d565b610a7761022636869003860186611e5b565b610a8961036336879003870187611e5b565b6001600160a01b03166341ee6d0e866040518263ffffffff1660e01b8152600401610ab49190612140565b5f60405180830381865afa158015610ace573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610af5919081019061218b565b604051602001610b089493929190612233565b6040516020818303038152906040529050919050565b610b26611644565b610b305f19611607565b565b5f610b3c816114f8565b610b4960208301836120e0565b610b52816116e7565b6040516304c1b8eb60e31b815283906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610ba0908490600401612140565b602060405180830381865afa158015610bbb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bdf919061214e565b610bfc57604051631fb1705560e21b815260040160405180910390fd5b83610c0f61026236839003830183611e5b565b610c2c57604051634d2baea960e11b815260040160405180910390fd5b5f610c44610c3f36889003880188611e5b565b611787565b5f818152609960205260409081902080546001600160a01b0319169055519091507fd7811913efd5d98fc7ea0d1fdd022b3d31987815360842d05b1d1cf55578d16a90610c92908890612140565b60405180910390a15f818152609a60205260409081902080546001600160c01b0319169055517f210a1118a869246162804e2a7f21ef808ebd93f4be7ed512014fe29a7a8be02e90610ce5908890612140565b60405180910390a1610cf86097826118ca565b507f4ffdfdd59e9e1e3c301608788f78dd458e61cb8c045ca92b62a7b484c80824fb86604051610d289190612140565b60405180910390a1505050505050565b610d4061149e565b610b305f611542565b5f60995f610d5684611787565b815260208101919091526040015f20546001600160a01b031692915050565b5f610d8060976118d5565b905090565b6060805f610d93609b6118de565b90505f8167ffffffffffffffff811115610daf57610daf611db8565b604051908082528060200260200182016040528015610dd8578160200160208202803683370190505b5090505f8267ffffffffffffffff811115610df557610df5611db8565b604051908082528060200260200182016040528015610e1e578160200160208202803683370190505b5090505f5b83811015610e90575f80610e38609b846118e8565b9150915081858481518110610e4f57610e4f6120fb565b60200260200101818152505080848481518110610e6e57610e6e6120fb565b6001600160a01b03909216602092830291909101909101525050600101610e23565b509094909350915050565b60605f610ea860976118d5565b90505f8167ffffffffffffffff811115610ec457610ec4611db8565b604051908082528060200260200182016040528015610f0857816020015b604080518082019091525f8082526020820152815260200190600190039081610ee25790505b5090505f5b82811015610f87575f610f21609783611905565b90505f610f5d82604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b905080848481518110610f7257610f726120fb565b60209081029190910101525050600101610f0d565b5092915050565b5f610f98816114f8565b610fa560208501856120e0565b610fae816116e7565b6040516304c1b8eb60e31b815285906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610ffc908490600401612140565b602060405180830381865afa158015611017573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061103b919061214e565b61105857604051631fb1705560e21b815260040160405180910390fd5b5f604051631f3ff92360e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637cffe48c906110a5908a90600401612140565b602060405180830381865afa1580156110c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110e4919061216d565b60028111156110f5576110f561221f565b036111135760405163e57cacbd60e01b815260040160405180910390fd5b611130611128610c3f36899003890189611e5b565b609790611910565b61114d57604051631883461560e01b815260040160405180910390fd5b7f4fb6efec7dd60036ce3a7af8d5c48425019daa0fb61eb471a966a7ac2c6fa6a68660405161117c9190612140565b60405180910390a161119661083536889003880188611e5b565b6105c06111a836889003880188611e5b565b6109b736879003870187611e5b565b6111bf61149e565b6111c881611593565b50565b6060818311156111ee5760405163561ce9bb60e01b815260040160405180910390fd5b6111f860976118d5565b821115611218576040516302da361360e61b815260040160405180910390fd5b5f611223848461229f565b90505f8167ffffffffffffffff81111561123f5761123f611db8565b60405190808252806020026020018201604052801561128357816020015b604080518082019091525f808252602082015281526020019060019003908161125d5790505b5090505f5b8281101561130c575f6112a661129e83896122b2565b609790611905565b90505f6112e282604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b9050808484815181106112f7576112f76120fb565b60209081029190910101525050600101611288565b50949350505050565b61131d61149e565b6003611328816114f8565b5f5b828110156106e8575f848483818110611345576113456120fb565b90506020020135905061136281609b61191b90919063ffffffff16565b61137f5760405163b3f92ba160e01b815260040160405180910390fd5b6040518181527f6824d36084ecf2cd819b137cb5d837cc6e73afce1e0e348c9fdecaa81d0341e59060200160405180910390a15060010161132a565b6113c361149e565b6001600160a01b0381166114285760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161065e565b6111c881611542565b611439611926565b606654801982198116146114605760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b6033546001600160a01b03163314610b305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161065e565b606654600160ff83161b908116036111c85760405163840a48d560e01b815260040160405180910390fd5b5f61153884846001600160a01b0385166119d7565b90505b9392505050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f8163ffffffff16116115b9576040516316d98e1b60e31b815260040160405180910390fd5b609e805463ffffffff191663ffffffff83169081179091556040519081527f4fbcd0cca70015b33db8af4aa4f2bd6fd6c1efa9460b8e2333f252c1467a63279060200160405180910390a150565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156116a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ca919061214e565b610b3057604051631d77d47760e21b815260040160405180910390fd5b6116f0816119f3565b6111c85760405163932d94f760e01b815260040160405180910390fd5b8060995f61171a85611787565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f7f7ccafd92d20fdb39dee184a0dce002a9da420ed0def461f2a027abc9b3f6df828260405161177b9291906122c5565b60405180910390a15050565b5f815f0151826020015163ffffffff166040516020016117d292919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526109d1906122eb565b602081015163ffffffff1615806118115750609e54602082015163ffffffff918216911610155b61182e57604051632e46483160e11b815260040160405180910390fd5b80609a5f61183b85611787565b815260208082019290925260409081015f2083518154949093015163ffffffff16600160a01b026001600160c01b03199094166001600160a01b0390931692909217929092179055517f3147846ee526009000671c20380b856a633345691300f82585f90034715cf0e29061177b908490849061230e565b5f818152600183016020526040812054151561153b565b5f61153b8383611a9c565b5f6109d1825490565b5f6109d182611b7f565b5f8080806118f68686611b89565b909450925050505b9250929050565b5f61153b8383611bb2565b5f61153b8383611bd8565b5f61153b8383611c24565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611982573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119a69190612329565b6001600160a01b0316336001600160a01b031614610b305760405163794821ff60e01b815260040160405180910390fd5b5f82815260028401602052604081208290556115388484611910565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa158015611a78573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d1919061214e565b5f8181526001830160205260408120548015611b76575f611abe60018361229f565b85549091505f90611ad19060019061229f565b9050818114611b30575f865f018281548110611aef57611aef6120fb565b905f5260205f200154905080875f018481548110611b0f57611b0f6120fb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611b4157611b41612344565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506109d1565b5f9150506109d1565b5f6109d1826118d5565b5f8080611b968585611905565b5f81815260029690960160205260409095205494959350505050565b5f825f018281548110611bc757611bc76120fb565b905f5260205f200154905092915050565b5f818152600183016020526040812054611c1d57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556109d1565b505f6109d1565b5f818152600283016020526040812081905561153b83836118ca565b5f5f83601f840112611c50575f5ffd5b50813567ffffffffffffffff811115611c67575f5ffd5b6020830191508360208260051b85010111156118fe575f5ffd5b5f5f5f5f60408587031215611c94575f5ffd5b843567ffffffffffffffff811115611caa575f5ffd5b611cb687828801611c40565b909550935050602085013567ffffffffffffffff811115611cd5575f5ffd5b611ce187828801611c40565b95989497509550505050565b6001600160a01b03811681146111c8575f5ffd5b803563ffffffff81168114611d14575f5ffd5b919050565b5f5f5f60608486031215611d2b575f5ffd5b8335611d3681611ced565b9250611d4460208501611d01565b929592945050506040919091013590565b5f60208284031215611d65575f5ffd5b5035919050565b5f60408284031215611d7c575f5ffd5b50919050565b5f5f60608385031215611d93575f5ffd5b611d9d8484611d6c565b91506040830135611dad81611ced565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715611df557611df5611db8565b604052919050565b5f60408284031215611e0d575f5ffd5b6040805190810167ffffffffffffffff81118282101715611e3057611e30611db8565b6040529050808235611e4181611ced565b8152611e4f60208401611d01565b60208201525092915050565b5f60408284031215611e6b575f5ffd5b61153b8383611dfd565b80516001600160a01b0316825260209081015163ffffffff16910152565b604081016109d18284611e75565b5f5f60808385031215611eb2575f5ffd5b611ebc8484611d6c565b9150611ecb8460408501611d6c565b90509250929050565b5f60408284031215611ee4575f5ffd5b61153b8383611d6c565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61153b6020830184611eee565b5f60208284031215611f3e575f5ffd5b813560ff8116811461153b575f5ffd5b604080825283519082018190525f9060208501906060840190835b81811015611f87578351835260209384019390920191600101611f69565b5050838103602080860191909152855180835291810192508501905f5b81811015611fcb5782516001600160a01b0316845260209384019390920191600101611fa4565b50919695505050505050565b602080825282518282018190525f918401906040840190835b8181101561201957612003838551611e75565b6020939093019260409290920191600101611ff0565b509095945050505050565b5f5f5f60a08486031215612036575f5ffd5b6120408585611d6c565b9250604084013561205081611ced565b915061205f8560608601611d6c565b90509250925092565b5f60208284031215612078575f5ffd5b61153b82611d01565b5f5f60408385031215612092575f5ffd5b50508035926020909101359150565b5f5f602083850312156120b2575f5ffd5b823567ffffffffffffffff8111156120c8575f5ffd5b6120d485828601611c40565b90969095509350505050565b5f602082840312156120f0575f5ffd5b813561153b81611ced565b634e487b7160e01b5f52603260045260245ffd5b803561211a81611ced565b6001600160a01b0316825263ffffffff61213660208301611d01565b1660208301525050565b604081016109d1828461210f565b5f6020828403121561215e575f5ffd5b8151801515811461153b575f5ffd5b5f6020828403121561217d575f5ffd5b81516003811061153b575f5ffd5b5f6020828403121561219b575f5ffd5b815167ffffffffffffffff8111156121b1575f5ffd5b8201601f810184136121c1575f5ffd5b805167ffffffffffffffff8111156121db576121db611db8565b6121ee601f8201601f1916602001611dcc565b818152856020838501011115612202575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b634e487b7160e01b5f52602160045260245ffd5b61223d818661210f565b5f6003851061225a57634e487b7160e01b5f52602160045260245ffd5b84604083015261226d6060830185611e75565b60c060a083015261228160c0830184611eee565b9695505050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156109d1576109d161228b565b808201808211156109d1576109d161228b565b606081016122d38285611e75565b6001600160a01b039290921660409190910152919050565b80516020808301519190811015611d7c575f1960209190910360031b1b16919050565b6080810161231c8285611e75565b61153b6040830184611e75565b5f60208284031215612339575f5ffd5b815161153b81611ced565b634e487b7160e01b5f52603160045260245ffdfea26469706673582212205f367ac5988f2026f0727d1dbe43305921daf374bbe2a46200b02e4f8ee9dcd964736f6c634300081e0033", } // CrossChainRegistryABI is the input ABI used to generate the binding from. @@ -56,7 +56,7 @@ var CrossChainRegistryABI = CrossChainRegistryMetaData.ABI var CrossChainRegistryBin = CrossChainRegistryMetaData.Bin // DeployCrossChainRegistry deploys a new Ethereum contract, binding an instance of CrossChainRegistry to it. -func DeployCrossChainRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _allocationManager common.Address, _keyRegistrar common.Address, _permissionController common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *CrossChainRegistry, error) { +func DeployCrossChainRegistry(auth *bind.TransactOpts, backend bind.ContractBackend, _allocationManager common.Address, _keyRegistrar common.Address, _permissionController common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *CrossChainRegistry, error) { parsed, err := CrossChainRegistryMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -65,7 +65,7 @@ func DeployCrossChainRegistry(auth *bind.TransactOpts, backend bind.ContractBack return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CrossChainRegistryBin), backend, _allocationManager, _keyRegistrar, _permissionController, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(CrossChainRegistryBin), backend, _allocationManager, _keyRegistrar, _permissionController, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -711,37 +711,6 @@ func (_CrossChainRegistry *CrossChainRegistryCallerSession) PermissionController return _CrossChainRegistry.Contract.PermissionController(&_CrossChainRegistry.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_CrossChainRegistry *CrossChainRegistryCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _CrossChainRegistry.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_CrossChainRegistry *CrossChainRegistrySession) Version() (string, error) { - return _CrossChainRegistry.Contract.Version(&_CrossChainRegistry.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_CrossChainRegistry *CrossChainRegistryCallerSession) Version() (string, error) { - return _CrossChainRegistry.Contract.Version(&_CrossChainRegistry.CallOpts) -} - // AddChainIDsToWhitelist is a paid mutator transaction binding the contract method 0x04e98be3. // // Solidity: function addChainIDsToWhitelist(uint256[] chainIDs, address[] operatorTableUpdaters) returns() diff --git a/pkg/bindings/DelegationManager/binding.go b/pkg/bindings/DelegationManager/binding.go index 37ca914a57..633c0c6fc2 100644 --- a/pkg/bindings/DelegationManager/binding.go +++ b/pkg/bindings/DelegationManager/binding.go @@ -62,7 +62,7 @@ type OperatorSet struct { // DelegationManagerMetaData contains all meta data concerning the DelegationManager contract. var DelegationManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_MIN_WITHDRAWAL_DELAY\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approver\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"totalQueued\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"spent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"pending\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDepositScalingFactor\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSnapshotOrdering\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", - Bin: "0x610160604052348015610010575f5ffd5b5060405161606b38038061606b83398101604081905261002f916101d9565b808084898989878a6001600160a01b03811661005e576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c052821660e05263ffffffff16610100521661012052610095816100b0565b61014052506100a490506100f6565b50505050505050610364565b5f5f829050601f815111156100e3578260405163305a27a960e01b81526004016100da9190610309565b60405180910390fd5b80516100ee8261033e565b179392505050565b5f54610100900460ff161561015d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100da565b5f5460ff908116146101ac575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101c2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f60e0888a0312156101ef575f5ffd5b87516101fa816101ae565b602089015190975061020b816101ae565b604089015190965061021c816101ae565b606089015190955061022d816101ae565b608089015190945061023e816101ae565b60a089015190935063ffffffff81168114610257575f5ffd5b60c08901519092506001600160401b03811115610272575f5ffd5b88015f601f82018b13610283575f5ffd5b81516001600160401b0381111561029c5761029c6101c5565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102ca576102ca6101c5565b6040528181528382016020018d10156102e1575f5ffd5b8160208501602083015e5f602083830101528092508094505050505092959891949750929550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561035e575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051610100516101205161014051615c156104565f395f8181610fde0152613dc701525f8181610412015261317001525f81816107030152818161326f0152818161354101526136fa01525f818161075301528181610cf301528181610eb601528181611056015281816113af0152818161181101528181612480015261414501525f818161043901528181610e340152818161130e0152818161158201528181612d7101528181612f5201526133b501525f818161036f01528181610e02015281816114d6015261338f01525f81816105e201528181612b370152613e360152615c155ff3fe608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e565750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f00000000000000000000000000000000000000000000000000000000000000006131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f000000000000000000000000000000000000000000000000000000000000000016906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f0000000000000000000000000000000000000000000000000000000000000000169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000000043615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f00000000000000000000000000000000000000000000000000000000000000006117e0565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000000836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000087608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f00000000000000000000000000000000000000000000000000000000000000006131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220cfab2ac68206c2bb7c3bde9ecb9d93609eac4e9fed888135fd6d461d388210b764736f6c634300081b0033", + Bin: "0x610160604052348015610010575f5ffd5b5060405161605338038061605383398101604081905261002f916101d9565b808084898989878a6001600160a01b03811661005e576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805293841660a05291831660c052821660e05263ffffffff16610100521661012052610095816100b0565b61014052506100a490506100f6565b50505050505050610364565b5f5f829050601f815111156100e3578260405163305a27a960e01b81526004016100da9190610309565b60405180910390fd5b80516100ee8261033e565b179392505050565b5f54610100900460ff161561015d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100da565b5f5460ff908116146101ac575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101c2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f5f60e0888a0312156101ef575f5ffd5b87516101fa816101ae565b602089015190975061020b816101ae565b604089015190965061021c816101ae565b606089015190955061022d816101ae565b608089015190945061023e816101ae565b60a089015190935063ffffffff81168114610257575f5ffd5b60c08901519092506001600160401b03811115610272575f5ffd5b88015f601f82018b13610283575f5ffd5b81516001600160401b0381111561029c5761029c6101c5565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102ca576102ca6101c5565b6040528181528382016020018d10156102e1575f5ffd5b8160208501602083015e5f602083830101528092508094505050505092959891949750929550565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561035e575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051610100516101205161014051615bfd6104565f395f8181610fc10152613dec01525f81816104120152613a7a01525f8181610703015281816131c7015281816134bd015261367601525f818161075301528181610cf301528181610eb60152818161103901528181611392015281816117f401528181612446015261414c01525f818161043901528181610e34015281816112f10152818161156501528181612d3701528181612f18015261333101525f818161036f01528181610e02015281816114b9015261330b01525f81816105e201528181612afd0152613e5b0152615bfd5ff3fe608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a86565b61080f565b610315610310366004614b1d565b610897565b6040516102e69190614b5b565b610335610330366004614b92565b610b09565b005b61034a610345366004614d27565b610b43565b6040516102e69190614dd5565b610335610365366004614e37565b610ca3565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e95565b610df7565b6103916103ca366004614ed8565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed8565b610f4a565b60405190151581526020016102e6565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610335610469366004614ef3565b610f69565b610476610fba565b6040516102e69190614f58565b610335610fea565b6102dc610499366004615026565b610ffe565b6103fd6104ac366004615057565b606654600160ff9092169190911b9081161490565b6102dc6104cf36600461508b565b61102d565b6066546102dc565b6104ef6104ea366004614b92565b61119f565b6040516102e69291906151c0565b61051061050b366004614ed8565b6111bc565b6040516102e6929190615232565b61033561052c36600461529f565b6112e6565b61039161053f366004614ed8565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed8565b611491565b6040516102e69291906152de565b6103fd610588366004614ed8565b611791565b6102dc61059b366004614ef3565b6117c9565b6102dc6105ae366004614ef3565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152f0565b611873565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b61034a610612366004615340565b6118ec565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61033561064036600461538c565b6119c2565b610658610653366004614b92565b611a7d565b6040516102e69190615428565b6102dc610673366004614ed8565b609f6020525f908152604090205481565b61031561069236600461543a565b611b99565b6103fd6106a5366004614b92565b609e6020525f908152604090205460ff1681565b6103fd6106c7366004615521565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614ef3565b611bb1565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000001681526020016102e6565b61074061073b366004615340565b611bed565b6040516102e692919061554b565b6103917f000000000000000000000000000000000000000000000000000000000000000081565b610315610783366004614ed8565b611e7a565b61033561079636600461556a565b611fa3565b6103356107a936600461543a565b611fdb565b6107c16107bc3660046155e8565b612046565b6040516102e69190615695565b6102dc6120eb565b6103356107e4366004614b92565b6121a4565b6103156107f7366004614ed8565b612212565b61033561080a366004614b92565b612235565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612346565b9695505050505050565b606060016108a481612374565b6108ac6123a2565b5f836001600160401b038111156108c5576108c5614ba9565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a7565b905060200281019061093a91906156bb565b6109489060208101906156d9565b905087878381811061095c5761095c6156a7565b905060200281019061096e91906156bb565b61097890806156d9565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a7565b90506020028101906109c291906156bb565b6109cc90806156d9565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506123fb92505050565b9050610ad433848a8a86818110610a1b57610a1b6156a7565b9050602002810190610a2d91906156bb565b610a3790806156d9565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a7565b9050602002810190610a8e91906156bb565b610a9c9060208101906156d9565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525088925061254d915050565b848381518110610ae657610ae66156a7565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612ae8565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612b8b565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c8683876123fb565b90505f85516001600160401b03811115610b8857610b88614ba9565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a7565b6020026020010151858481518110610c5857610c586156a7565b602002602001015183612bc89092919063ffffffff16565b838381518110610c8257610c826156a7565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123a2565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612be6565b610d663333612c48565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf92919061571e565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610e565750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123a2565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f919061574c565b90505f610f2d878784612ed1565b9050610f3d838888888886612fb3565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f73816130f8565b610f7b6123a2565b610f8483611791565b610fa1576040516325ec6c1f60e01b815260040160405180910390fd5b610fab8383612be6565b610fb5600160c955565b505050565b6060610fe57f000000000000000000000000000000000000000000000000000000000000000061311e565b905090565b610ff2612ae8565b610ffc5f19612b8b565b565b5f816040516020016110109190615428565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611077576040516323d871a560e01b815260040160405180910390fd5b61107f6123a2565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110bd906001600160401b0380871690861661315b565b90505f6110cc89878787613173565b90506110d8818361577b565b92506110e6895f888561326a565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a2611135866132e4565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b8152600401611166949392919061578e565b5f604051808303815f87803b15801561117d575f5ffd5b505af115801561118f573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111a7614947565b60606111b283613356565b9094909350915050565b6060805f6111c984612212565b8051909150806001600160401b038111156111e6576111e6614ba9565b60405190808252806020026020018201604052801561121f57816020015b61120c614947565b8152602001906001900390816112045790505b509350806001600160401b0381111561123a5761123a614ba9565b60405190808252806020026020018201604052801561126d57816020015b60608152602001906001900390816112585790505b5092505f5b818110156112de5761129c83828151811061128f5761128f6156a7565b6020026020010151613356565b8683815181106112ae576112ae6156a7565b602002602001018684815181106112c7576112c76156a7565b602090810291909101019190915252600101611272565b505050915091565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461132f57604051633213a66160e21b815260040160405180910390fd5b6113376123a2565b61134083610f4a565b15610fab576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa1580156113d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113fb919061574c565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0845282528083208151928301909152548152919250611461866114596001600160401b038087169089166135a9565b8491906135bd565b9050611483848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac08461326a565b50505050610fb5600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f000000000000000000000000000000000000000000000000000000000000000016906394f649dd906024015f60405180830381865afa1580156114fd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611524919081019061583e565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f0000000000000000000000000000000000000000000000000000000000000000169063fe243a1790604401602060405180830381865afa1580156115aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ce91906158f9565b9050805f036115e257509094909350915050565b5f835160016115f1919061577b565b6001600160401b0381111561160857611608614ba9565b604051908082528060200260200182016040528015611631578160200160208202803683370190505b5090505f84516001611643919061577b565b6001600160401b0381111561165a5761165a614ba9565b604051908082528060200260200182016040528015611683578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116ae576116ae6156a7565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116e2576116e26156a7565b60209081029190910101525f5b85518110156117835785818151811061170a5761170a6156a7565b6020026020010151838281518110611724576117246156a7565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611756576117566156a7565b6020026020010151828281518110611770576117706156a7565b60209081029190910101526001016116ef565b509097909650945050505050565b5f6001600160a01b038216158015906117c357506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063a9333ec890604401602060405180830381865afa158015611839573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185d919061574c565b905061186b8484835f613173565b949350505050565b8261187d816130f8565b61188684611791565b6118a3576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b670809084846040516118de92919061571e565b60405180910390a250505050565b60605f82516001600160401b0381111561190857611908614ba9565b604051908082528060200260200182016040528015611931578160200160208202803683370190505b5090505f5b83518110156119ba576001600160a01b0385165f908152609860205260408120855190919086908490811061196d5761196d6156a7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119a7576119a76156a7565b6020908102919091010152600101611936565b509392505050565b60026119cd81612374565b6119d56123a2565b855f5b81811015611a6857611a608989838181106119f5576119f56156a7565b9050602002810190611a079190615910565b611a1090615924565b888884818110611a2257611a226156a7565b9050602002810190611a3491906156d9565b888886818110611a4657611a466156a7565b9050602002016020810190611a5b919061592f565b6135db565b6001016119d8565b5050611a74600160c955565b50505050505050565b611a85614947565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b3357602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b15575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611b8957602002820191905f5260205f20905b815481526020019060010190808311611b75575b5050505050815250509050919050565b6060611ba433611e7a565b9050610c9c848484611fdb565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613a1d565b60608082516001600160401b03811115611c0957611c09614ba9565b604051908082528060200260200182016040528015611c32578160200160208202803683370190505b50915082516001600160401b03811115611c4e57611c4e614ba9565b604051908082528060200260200182016040528015611c77578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611ca28683876123fb565b90505f5b8551811015611e6f575f611cd2878381518110611cc557611cc56156a7565b60200260200101516132e4565b9050806001600160a01b031663fe243a1789898581518110611cf657611cf66156a7565b60200260200101516040518363ffffffff1660e01b8152600401611d309291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6f91906158f9565b858381518110611d8157611d816156a7565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dc457611dc46156a7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e48868481518110611e1657611e166156a7565b6020026020010151858581518110611e3057611e306156a7565b6020026020010151836135bd9092919063ffffffff16565b878481518110611e5a57611e5a6156a7565b60209081029190910101525050600101611ca6565b5050505b9250929050565b6060611e846123a2565b611e8d82610f4a565b611eaa5760405163a5c7c44560e01b815260040160405180910390fd5b611eb382611791565b15611ed1576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611f89576001600160a01b038083165f908152609a602052604090205416611f0481613a3c565b80611f2a57506001600160a01b038181165f908152609960205260409020600101541633145b611f4757604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611f9282613ae5565b9050611f9e600160c955565b919050565b6002611fae81612374565b611fb66123a2565b611fca611fc286615924565b8585856135db565b611fd4600160c955565b5050505050565b611fe36123a2565b611fec33610f4a565b1561200a57604051633bf2b50360e11b815260040160405180910390fd5b61201383611791565b612030576040516325ec6c1f60e01b815260040160405180910390fd5b61203c33848484613d25565b610fab3384612c48565b60605f83516001600160401b0381111561206257612062614ba9565b60405190808252806020026020018201604052801561209557816020015b60608152602001906001900390816120805790505b5090505f5b84518110156119ba576120c68582815181106120b8576120b86156a7565b6020026020010151856118ec565b8282815181106120d8576120d86156a7565b602090810291909101015260010161209a565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612158613de4565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121ac613e59565b606654801982198116146121d35760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117c390613f0a565b5f54610100900460ff161580801561225357505f54600160ff909116105b8061226c5750303b15801561226c57505f5460ff166001145b6122d45760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156122f5575f805461ff0019166101001790555b6122fe82612b8b565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f61234f6120eb565b60405161190160f01b6020820152602281019190915260428101839052606201611010565b606654600160ff83161b9081160361239f5760405163840a48d560e01b815260040160405180910390fd5b50565b600260c954036123f45760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016122cb565b600260c955565b60605f82516001600160401b0381111561241757612417614ba9565b604051908082528060200260200182016040528015612440578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663547afb8786866040518363ffffffff1660e01b815260040161249292919061594a565b5f60405180830381865afa1580156124ac573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124d3919081019061596d565b90505f5b84518110156125425761251d878683815181106124f6576124f66156a7565b6020026020010151848481518110612510576125106156a7565b6020026020010151612ed1565b83828151811061252f5761252f6156a7565b60209081029190910101526001016124d7565b509095945050505050565b5f6001600160a01b038616612575576040516339b190bb60e11b815260040160405180910390fd5b83515f036125965760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125b0576125b0614ba9565b6040519080825280602002602001820160405280156125d9578160200160208202803683370190505b5090505f85516001600160401b038111156125f6576125f6614ba9565b60405190808252806020026020018201604052801561261f578160200160208202803683370190505b5090505f5b865181101561291b575f612643888381518110611cc557611cc56156a7565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a858151811061267c5761267c6156a7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2090506126f58884815181106126ba576126ba6156a7565b60200260200101518885815181106126d4576126d46156a7565b602090810291909101810151604080519283019052845482529091906135bd565b848481518110612707576127076156a7565b602002602001018181525050612746888481518110612728576127286156a7565b60209081029190910181015160408051928301905283548252613f16565b858481518110612758576127586156a7565b60209081029190910101526001600160a01b038a16156127ed576127af8a8a8581518110612788576127886156a7565b60200260200101518786815181106127a2576127a26156a7565b6020026020010151613f2a565b6127ed8a8c8b86815181106127c6576127c66156a7565b60200260200101518787815181106127e0576127e06156a7565b602002602001015161326a565b5f826001600160a01b031663724af4238d8c8781518110612810576128106156a7565b60200260200101518c888151811061282a5761282a6156a7565b60200260200101516040518463ffffffff1660e01b8152600401612850939291906159fc565b6020604051808303815f875af115801561286c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289091906158f9565b9050805f0361290d575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b86815181106128d0576128d06156a7565b60200260200101516128f5856040518060200160405290815f82015481525050613a1d565b604051612904939291906159fc565b60405180910390a15b505050806001019050612624565b506001600160a01b0388165f908152609f6020526040812080549182919061294283615a20565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129a882610ffe565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a5e92600585019201906149a0565b5060c08201518051612a7a916006840191602090910190614a03565b5050506001600160a01b038b165f90815260a360205260409020612a9e9082613f94565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612ad293929190615a38565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b4a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b6e9190615a62565b610ffc57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61186b82612be0612bd987613a1d565b8690613f9f565b90613f9f565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612206565b5f612c5281612374565b5f5f612c5d85611491565b915091505f612c6d5f86856123fb565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611a745773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d0057612d006156a7565b60200260200101516001600160a01b031603612e705760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612d7e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612da2919061574c565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612ddb57612ddb6156a7565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e4f858481518110612e2d57612e2d6156a7565b6020026020010151836001600160401b0316836135bd9092919063ffffffff16565b858481518110612e6157612e616156a7565b60200260200101818152505050505b612ec98688868481518110612e8757612e876156a7565b60200260200101515f878681518110612ea257612ea26156a7565b6020026020010151878781518110612ebc57612ebc6156a7565b6020026020010151612fb3565b600101612cc7565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fa35760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063a3d75e0990602401602060405180830381865afa158015612f5f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f83919061574c565b9050612f9b6001600160401b038481169083166135a9565b915050610c9c565b506001600160401b031692915050565b805f03612fd357604051630a33bc6960e21b815260040160405180910390fd5b81156130f0576001600160a01b038086165f90815260a26020908152604080832093881683529290522061300981858585613fb3565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061304790613a1d565b604051613056939291906159fc565b60405180910390a161306786610f4a565b15611a74576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130a290849061577b565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c8787866040516130e6939291906159fc565b60405180910390a2505b505050505050565b61310181613a3c565b61239f5760405163932d94f760e01b815260040160405180910390fd5b60605f61312a83614049565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6131698483856001614070565b61186b9085615a7d565b5f826001600160401b03165f0361318b57505f61186b565b6001600160a01b038086165f90815260a56020908152604080832093881683529290529081206131ba906140cb565b90505f61322060016131ec7f000000000000000000000000000000000000000000000000000000000000000043615a90565b6131f69190615a90565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140e5565b90505f61322d8284615a7d565b905061325e613245826001600160401b0389166135a9565b876001600160401b0316876001600160401b031661315b565b98975050505050505050565b6001600160a01b038085165f908152609860209081526040808320938616835292905290812080548392906132a0908490615a7d565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd8484846040516118de939291906159fc565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01461332f577f00000000000000000000000000000000000000000000000000000000000000006117c3565b7f000000000000000000000000000000000000000000000000000000000000000092915050565b61335e614947565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561341057602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116133f2575b505050505081526020016006820180548060200260200160405190810160405280929190818152602001828054801561346657602002820191905f5260205f20905b815481526020019060010190808311613452575b50505050508152505091508160a00151516001600160401b0381111561348e5761348e614ba9565b6040519080825280602002602001820160405280156134b7578160200160208202803683370190505b5090505f7f000000000000000000000000000000000000000000000000000000000000000083608001516134eb9190615aac565b90505f4363ffffffff168263ffffffff161061351c57613517845f015185602001518660a001516123fb565b613533565b613533845f015185602001518660a0015185614101565b90505f5b8460a00151518110156112de576135848560c00151828151811061355d5761355d6156a7565b6020026020010151838381518110613577576135776156a7565b602002602001015161422f565b848281518110613596576135966156a7565b6020908102919091010152600101613537565b5f610c9c8383670de0b6b3a764000061423a565b5f61186b826135d56135ce87613a1d565b86906135a9565b906135a9565b60a0840151518214613600576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b031614613636576040516316110d3560e21b815260040160405180910390fd5b5f61364085610ffe565b5f818152609e602052604090205490915060ff16613671576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000087608001516136a49190615aac565b90508063ffffffff164363ffffffff16116136d2576040516378f67ae160e11b815260040160405180910390fd5b6136e9875f015188602001518960a0015184614101565b87516001600160a01b03165f90815260a36020526040902090925061370f91508361431f565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137666005830182614a3c565b613773600683015f614a3c565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906137bc9084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a015191909316926137f69184906123fb565b90505f5b8860a0015151811015613a12575f6138218a60a001518381518110611cc557611cc56156a7565b90505f6138578b60c00151848151811061383d5761383d6156a7565b6020026020010151878581518110613577576135776156a7565b9050805f03613867575050613a0a565b871561393557816001600160a01b0316632eae418c8c5f01518d60a001518681518110613896576138966156a7565b60200260200101518d8d888181106138b0576138b06156a7565b90506020020160208101906138c59190614ed8565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561391a575f5ffd5b505af115801561392c573d5f5f3e3d5ffd5b50505050613a07565b5f5f836001600160a01b03166350ff72258e5f01518f60a001518881518110613960576139606156a7565b6020026020010151866040518463ffffffff1660e01b8152600401613987939291906159fc565b60408051808303815f875af11580156139a2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139c69190615ac8565b91509150613a04878e5f01518f60a0015188815181106139e8576139e86156a7565b602002602001015185858b8b81518110612ebc57612ebc6156a7565b50505b50505b6001016137fa565b505050505050505050565b80515f9015613a2d5781516117c3565b670de0b6b3a764000092915050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa158015613ac1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117c39190615a62565b60606001613af281612374565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b5186611491565b9150915081515f03613b6557505050613d1f565b81516001600160401b03811115613b7e57613b7e614ba9565b604051908082528060200260200182016040528015613ba7578160200160208202803683370190505b5094505f613bb68785856123fb565b90505f5b8351811015613d19576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c3a57613c3a6156a7565b6020026020010151835f81518110613c5457613c546156a7565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c8657613c866156a7565b6020026020010151825f81518110613ca057613ca06156a7565b602002602001018181525050848481518110613cbe57613cbe6156a7565b6020026020010151815f81518110613cd857613cd86156a7565b602002602001018181525050613cf18b8985858561254d565b8a8581518110613d0357613d036156a7565b6020908102919091010152505050600101613bba565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d4d5750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d9157604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff19166001179055830151611fd4908290613dd890889088908490889061080f565b8551602087015161432a565b60605f613e107f000000000000000000000000000000000000000000000000000000000000000061311e565b9050805f81518110613e2457613e246156a7565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ed99190615aea565b6001600160a01b0316336001600160a01b031614610ffc5760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c8361437c565b5f610c9c613f2384613a1d565b83906135a9565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f59906140cb565b9050610df143613f69848461577b565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143d5565b5f610c9c83836143e0565b5f610c9c83670de0b6b3a76400008461423a565b825f03613fdf57604080516020810190915284548152613fd8908290612be090613a1d565b8455610df1565b6040805160208101909152845481525f90613ffb9085846135bd565b90505f614008848361577b565b90505f61402384612be061401c888a61577b565b8590613f9f565b80885590505f819003611a745760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117c357604051632cd44ac360e21b815260040160405180910390fd5b5f5f61407d86868661423a565b9050600183600281111561409357614093615b05565b1480156140af57505f84806140aa576140aa615b19565b868809115b156140c2576140bf60018261577b565b90505b95945050505050565b5f6140d6828261442c565b6001600160e01b031692915050565b5f6140f1838383614471565b6001600160e01b03169392505050565b60605f83516001600160401b0381111561411d5761411d614ba9565b604051908082528060200260200182016040528015614146578160200160208202803683370190505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419a93929190615b2d565b5f60405180830381865afa1580156141b4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141db919081019061596d565b90505f5b8551811015614223576141fe888783815181106124f6576124f66156a7565b838281518110614210576142106156a7565b60209081029190910101526001016141df565b50909695505050505050565b5f610c9c83836135a9565b5f80805f19858709858702925082811083820303915050805f036142715783828161426757614267615b19565b0492505050610c9c565b8084116142b85760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016122cb565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144ba565b4281101561434b57604051630819bdcd60e01b815260040160405180910390fd5b61435f6001600160a01b038516848461459d565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c957602002820191905f5260205f20905b8154815260200190600101908083116143b5575b50505050509050919050565b610fb58383836145f1565b5f81815260018301602052604081205461442557508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117c3565b505f6117c3565b81545f9080156144695761445284614445600184615a7d565b5f91825260209091200190565b5464010000000090046001600160e01b031661186b565b509092915050565b82545f9081614482868683856146f7565b905080156144b05761449986614445600184615a7d565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f8181526001830160205260408120548015614594575f6144dc600183615a7d565b85549091505f906144ef90600190615a7d565b905081811461454e575f865f01828154811061450d5761450d6156a7565b905f5260205f200154905080875f01848154811061452d5761452d6156a7565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455f5761455f615b66565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117c3565b5f9150506117c3565b5f5f5f6145aa858561474a565b90925090505f8160048111156145c2576145c2615b05565b1480156145e05750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614789565b825480156146a9575f61460985614445600185615a7d565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b03166020840152919250908516101561465c5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a7578261467d86614445600186615a7d565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119ba575f61470c8484614870565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561473657809250614744565b61474181600161577b565b93505b506146f9565b5f5f825160410361477e576020830151604084015160608501515f1a6147728782858561488a565b94509450505050611e73565b505f90506002611e73565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147b1929190615b7a565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147ef9190615b92565b5f60405180830381855afa9150503d805f8114614827576040519150601f19603f3d011682016040523d82523d5f602084013e61482c565b606091505b509150915081801561484057506020815110155b801561088d57508051630b135d3f60e11b9061486590830160209081019084016158f9565b149695505050505050565b5f61487e6002848418615ba8565b610c9c9084841661577b565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148bf57505f9050600361493e565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614910573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614938575f6001925092505061493e565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149f3579160200282015b828111156149f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149be565b506149ff929150614a53565b5090565b828054828255905f5260205f209081019282156149f3579160200282015b828111156149f3578251825591602001919060010190614a21565b5080545f8255905f5260205f209081019061239f91905b5b808211156149ff575f8155600101614a54565b6001600160a01b038116811461239f575f5ffd5b8035611f9e81614a67565b5f5f5f5f5f60a08688031215614a9a575f5ffd5b8535614aa581614a67565b94506020860135614ab581614a67565b93506040860135614ac581614a67565b94979396509394606081013594506080013592915050565b5f5f83601f840112614aed575f5ffd5b5081356001600160401b03811115614b03575f5ffd5b6020830191508360208260051b8501011115611e73575f5ffd5b5f5f60208385031215614b2e575f5ffd5b82356001600160401b03811115614b43575f5ffd5b614b4f85828601614add565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015612542578351835260209384019390920191600101614b74565b5f60208284031215614ba2575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bdf57614bdf614ba9565b60405290565b604080519081016001600160401b0381118282101715614bdf57614bdf614ba9565b604051601f8201601f191681016001600160401b0381118282101715614c2f57614c2f614ba9565b604052919050565b5f6001600160401b03821115614c4f57614c4f614ba9565b5060051b60200190565b5f82601f830112614c68575f5ffd5b8135614c7b614c7682614c37565b614c07565b8082825260208201915060208360051b860101925085831115614c9c575f5ffd5b602085015b83811015614cc2578035614cb481614a67565b835260209283019201614ca1565b5095945050505050565b5f82601f830112614cdb575f5ffd5b8135614ce9614c7682614c37565b8082825260208201915060208360051b860101925085831115614d0a575f5ffd5b602085015b83811015614cc2578035835260209283019201614d0f565b5f5f5f60608486031215614d39575f5ffd5b8335614d4481614a67565b925060208401356001600160401b03811115614d5e575f5ffd5b614d6a86828701614c59565b92505060408401356001600160401b03811115614d85575f5ffd5b614d9186828701614ccc565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dcb578151865260209586019590910190600101614dad565b5093949350505050565b602081525f610c9c6020830184614d9b565b803563ffffffff81168114611f9e575f5ffd5b5f5f83601f840112614e0a575f5ffd5b5081356001600160401b03811115614e20575f5ffd5b602083019150836020828501011115611e73575f5ffd5b5f5f5f5f60608587031215614e4a575f5ffd5b8435614e5581614a67565b9350614e6360208601614de7565b925060408501356001600160401b03811115614e7d575f5ffd5b614e8987828801614dfa565b95989497509550505050565b5f5f5f5f60808587031215614ea8575f5ffd5b8435614eb381614a67565b93506020850135614ec381614a67565b93969395505050506040820135916060013590565b5f60208284031215614ee8575f5ffd5b8135610c9c81614a67565b5f5f60408385031215614f04575f5ffd5b8235614f0f81614a67565b91506020830135614f1f81614a67565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f2a565b5f60e08284031215614f7a575f5ffd5b614f82614bbd565b9050614f8d82614a7b565b8152614f9b60208301614a7b565b6020820152614fac60408301614a7b565b604082015260608281013590820152614fc760808301614de7565b608082015260a08201356001600160401b03811115614fe4575f5ffd5b614ff084828501614c59565b60a08301525060c08201356001600160401b0381111561500e575f5ffd5b61501a84828501614ccc565b60c08301525092915050565b5f60208284031215615036575f5ffd5b81356001600160401b0381111561504b575f5ffd5b61186b84828501614f6a565b5f60208284031215615067575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b038116811461239f575f5ffd5b5f5f5f5f5f5f86880360e08112156150a1575f5ffd5b87356150ac81614a67565b96506040601f19820112156150bf575f5ffd5b506020870194506060870135935060808701356150db81614a67565b925060a08701356150eb81615077565b915060c08701356150fb81615077565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dcb5781516001600160a01b031686526020958601959091019060010161511b565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f9161518d9085018263ffffffff169052565b5060a082015160e060a08501526151a760e0850182615109565b905060c083015184820360c08601526140c28282614d9b565b604081525f6151d26040830185615142565b82810360208401526140c28185614d9b565b5f82825180855260208501945060208160051b830101602085015f5b8381101561422357601f1985840301885261521c838351614d9b565b6020988901989093509190910190600101615200565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528957605f19878603018452615274858351615142565b94506020938401939190910190600101615258565b5050505082810360208401526140c281856151e4565b5f5f5f606084860312156152b1575f5ffd5b83356152bc81614a67565b92506020840135915060408401356152d381615077565b809150509250925092565b604081525f6151d26040830185615109565b5f5f5f60408486031215615302575f5ffd5b833561530d81614a67565b925060208401356001600160401b03811115615327575f5ffd5b61533386828701614dfa565b9497909650939450505050565b5f5f60408385031215615351575f5ffd5b823561535c81614a67565b915060208301356001600160401b03811115615376575f5ffd5b61538285828601614c59565b9150509250929050565b5f5f5f5f5f5f606087890312156153a1575f5ffd5b86356001600160401b038111156153b6575f5ffd5b6153c289828a01614add565b90975095505060208701356001600160401b038111156153e0575f5ffd5b6153ec89828a01614add565b90955093505060408701356001600160401b0381111561540a575f5ffd5b61541689828a01614add565b979a9699509497509295939492505050565b602081525f610c9c6020830184615142565b5f5f5f6060848603121561544c575f5ffd5b833561545781614a67565b925060208401356001600160401b03811115615471575f5ffd5b840160408187031215615482575f5ffd5b61548a614be5565b81356001600160401b0381111561549f575f5ffd5b8201601f810188136154af575f5ffd5b80356001600160401b038111156154c8576154c8614ba9565b6154db601f8201601f1916602001614c07565b8181528960208385010111156154ef575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f60408385031215615532575f5ffd5b823561553d81614a67565b946020939093013593505050565b604081525f6151d26040830185614d9b565b801515811461239f575f5ffd5b5f5f5f5f6060858703121561557d575f5ffd5b84356001600160401b03811115615592575f5ffd5b850160e081880312156155a3575f5ffd5b935060208501356001600160401b038111156155bd575f5ffd5b6155c987828801614add565b90945092505060408501356155dd8161555d565b939692955090935050565b5f5f604083850312156155f9575f5ffd5b82356001600160401b0381111561560e575f5ffd5b8301601f8101851361561e575f5ffd5b803561562c614c7682614c37565b8082825260208201915060208360051b85010192508783111561564d575f5ffd5b6020840193505b8284101561567857833561566781614a67565b825260209384019390910190615654565b945050505060208301356001600160401b03811115615376575f5ffd5b602081525f610c9c60208301846151e4565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156cf575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156ee575f5ffd5b8301803591506001600160401b03821115615707575f5ffd5b6020019150600581901b3603821315611e73575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6020828403121561575c575f5ffd5b8151610c9c81615077565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117c3576117c3615767565b60a08101853561579d81614a67565b6001600160a01b0316825263ffffffff6157b960208801614de7565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157f2575f5ffd5b8151615800614c7682614c37565b8082825260208201915060208360051b860101925085831115615821575f5ffd5b602085015b83811015614cc2578051835260209283019201615826565b5f5f6040838503121561584f575f5ffd5b82516001600160401b03811115615864575f5ffd5b8301601f81018513615874575f5ffd5b8051615882614c7682614c37565b8082825260208201915060208360051b8501019250878311156158a3575f5ffd5b6020840193505b828410156158ce5783516158bd81614a67565b8252602093840193909101906158aa565b8095505050505060208301516001600160401b038111156158ed575f5ffd5b615382858286016157e3565b5f60208284031215615909575f5ffd5b5051919050565b5f823560de198336030181126156cf575f5ffd5b5f6117c33683614f6a565b5f6020828403121561593f575f5ffd5b8135610c9c8161555d565b6001600160a01b03831681526040602082018190525f9061186b90830184615109565b5f6020828403121561597d575f5ffd5b81516001600160401b03811115615992575f5ffd5b8201601f810184136159a2575f5ffd5b80516159b0614c7682614c37565b8082825260208201915060208360051b8501019250868311156159d1575f5ffd5b6020840193505b8284101561088d5783516159eb81615077565b8252602093840193909101906159d8565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a3157615a31615767565b5060010190565b838152606060208201525f615a506060830185615142565b828103604084015261088d8185614d9b565b5f60208284031215615a72575f5ffd5b8151610c9c8161555d565b818103818111156117c3576117c3615767565b63ffffffff82811682821603908111156117c3576117c3615767565b63ffffffff81811683821601908111156117c3576117c3615767565b5f5f60408385031215615ad9575f5ffd5b505080516020909101519092909150565b5f60208284031215615afa575f5ffd5b8151610c9c81614a67565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160a01b03841681526060602082018190525f90615b5090830185615109565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f61186b6040830184614f2a565b5f82518060208501845e5f920191825250919050565b5f82615bc257634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220eb609cbbe717d35d459e2d155ddc463ef3365654ab74b2f281a4052efc62caaa64736f6c634300081e0033", } // DelegationManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/DelegationManagerStorage/binding.go b/pkg/bindings/DelegationManagerStorage/binding.go index 584611fd42..b6828d6609 100644 --- a/pkg/bindings/DelegationManagerStorage/binding.go +++ b/pkg/bindings/DelegationManagerStorage/binding.go @@ -61,7 +61,7 @@ type OperatorSet struct { // DelegationManagerStorageMetaData contains all meta data concerning the DelegationManagerStorage contract. var DelegationManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"totalQueued\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"spent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"pending\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"totalQueued\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"spent\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pendingWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"pending\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", } // DelegationManagerStorageABI is the input ABI used to generate the binding from. @@ -1121,37 +1121,6 @@ func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Strategy return _DelegationManagerStorage.Contract.StrategyManager(&_DelegationManagerStorage.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_DelegationManagerStorage *DelegationManagerStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _DelegationManagerStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_DelegationManagerStorage *DelegationManagerStorageSession) Version() (string, error) { - return _DelegationManagerStorage.Contract.Version(&_DelegationManagerStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_DelegationManagerStorage *DelegationManagerStorageCallerSession) Version() (string, error) { - return _DelegationManagerStorage.Contract.Version(&_DelegationManagerStorage.CallOpts) -} - // CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // // Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() diff --git a/pkg/bindings/ECDSACertificateVerifier/binding.go b/pkg/bindings/ECDSACertificateVerifier/binding.go index 48276e9505..63a17e4083 100644 --- a/pkg/bindings/ECDSACertificateVerifier/binding.go +++ b/pkg/bindings/ECDSACertificateVerifier/binding.go @@ -57,7 +57,7 @@ type OperatorSet struct { // ECDSACertificateVerifierMetaData contains all meta data concerning the ECDSACertificateVerifier contract. var ECDSACertificateVerifierMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_operatorTableUpdater\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateCertificateDigest\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateCertificateDigestBytes\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfo\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorIndex\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.ECDSAOperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorInfos\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIOperatorTableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetOwner\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalStakeWeights\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isReferenceTimestampSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"latestReferenceTimestamp\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxOperatorTableStaleness\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorTableUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIOperatorTableUpdater\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"internalType\":\"structIOperatorTableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"operatorSetConfig\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyCertificate\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCertificateNominal\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeNominalThresholds\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCertificateProportion\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"totalStakeProportionThresholds\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxStalenessPeriodUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetOwnerUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"owner\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TableUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorInfos\",\"type\":\"tuple[]\",\"indexed\":false,\"internalType\":\"structIOperatorTableCalculatorTypes.ECDSAOperatorInfo[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"IndexOutOfBounds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignatureLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyTableUpdater\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorCountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReferenceTimestampDoesNotExist\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignersNotOrdered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"VerificationFailed\",\"inputs\":[]}]", - Bin: "0x60c060405234801561000f575f5ffd5b5060405161231938038061231983398101604081905261002e9161016d565b6001600160a01b03821660805280806100468161005b565b60a0525061005490506100a1565b5050610297565b5f5f829050601f8151111561008e578260405163305a27a960e01b8152600401610085919061023c565b60405180910390fd5b805161009982610271565b179392505050565b5f54610100900460ff16156101085760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610085565b5f5460ff90811614610157575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017e575f5ffd5b82516001600160a01b0381168114610194575f5ffd5b60208401519092506001600160401b038111156101af575f5ffd5b8301601f810185136101bf575f5ffd5b80516001600160401b038111156101d8576101d8610159565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020657610206610159565b60405281815282820160200187101561021d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610291575f198160200360031b1b821691505b50919050565b60805160a05161204c6102cd5f395f8181610342015261104601525f81816101ad015281816103760152610ee4015261204c5ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c80637c85ac4c1161009e578063be86e0b21161006e578063be86e0b21461026e578063c0da24201461028f578063cd83a72b146102a2578063e49613fc146102c5578063f698da25146102e5575f5ffd5b80637c85ac4c146101fa5780637d1d1f5b1461021a57806380c7d3f31461023a578063848189201461025b575f5ffd5b80635ddb9b5b116100d95780635ddb9b5b1461016d5780636141879e1461019557806368d6e081146101a8578063702ca531146101e7575f5ffd5b8063184674341461010a57806323c2a3cb1461013057806354fd4d501461014357806356d482f514610158575b5f5ffd5b61011d61011836600461161c565b6102ed565b6040519081526020015b60405180910390f35b61011d61013e3660046116fc565b610308565b61014b61033b565b604051610127919061175c565b61016b6101663660046117cb565b61036b565b005b61018061017b36600461183d565b610582565b60405163ffffffff9091168152602001610127565b6101806101a336600461183d565b6105a8565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610127565b61014b6101f536600461161c565b6105ce565b61020d6102083660046116fc565b610665565b60405161012791906118ac565b61022d61022836600461190f565b6107c3565b6040516101279190611964565b61024d610248366004611986565b610986565b604051610127929190611a0a565b6101cf61026936600461183d565b6109a4565b61028161027c366004611a37565b6109cd565b604051610127929190611b1d565b61028161029d366004611b3f565b610a6d565b6102b56102b03660046116fc565b610b6f565b6040519015158152602001610127565b6102d86102d3366004611bb5565b610ba5565b6040516101279190611bf0565b61011d610c9e565b5f6102f883836105ce565b8051906020012090505b92915050565b5f5f61031384610d5e565b5f90815260046020908152604080832063ffffffff8716845290915290205491505092915050565b60606103667f0000000000000000000000000000000000000000000000000000000000000000610dc1565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103b45760405163030c1b6b60e11b815260040160405180910390fd5b5f6103cc6103c73688900388018861183d565b610d5e565b5f8181526003602052604090205490915063ffffffff9081169086161161040657604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8916845290915281208490555b8381101561048e5784848281811061044257610442611c02565b90506020028101906104549190611c16565b5f83815260056020908152604080832063ffffffff8b168452825280832085845290915290206104848282611c5f565b5050600101610428565b505f818152600360209081526040909120805463ffffffff191663ffffffff88161790556104be90830183611d62565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b0394909416939093179092556104fd91908401908401611d7d565b5f828152600260209081526040808320805463ffffffff191663ffffffff958616179055600682528083209389168352929052819020805460ff19166001179055517f4f588da9ec57976194a79b5594f8f8782923d93013df2b9ed12fe125805011ef90610572908890889088908890611d96565b60405180910390a1505050505050565b5f5f61058d83610d5e565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6105b383610d5e565b5f9081526002602052604090205463ffffffff169392505050565b604080517fda346acb3ce99e7c5132bf8cafb159ad8085970ebfdba78007ef0fe163063d1460208083019190915263ffffffff85168284015260608083018590528351808403820181526080909301909352815191012061062d610c9e565b60405161190160f01b602082015260228101919091526042810182905260620160405160208183030381529060405291505092915050565b60605f61067184610d5e565b5f81815260046020908152604080832063ffffffff8089168552925282205492935082166001600160401b038111156106ac576106ac611644565b6040519080825280602002602001820160405280156106f157816020015b604080518082019091525f8152606060208201528152602001906001900390816106ca5790505b5090505f5b8263ffffffff168110156107b9575f84815260056020908152604080832063ffffffff8a16845282528083208484528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561078b57602002820191905f5260205f20905b815481526020019060010190808311610777575b5050505050815250508282815181106107a6576107a6611c02565b60209081029190910101526001016106f6565b5095945050505050565b60605f6107d86103c73686900386018661183d565b5f81815260046020908152604080832063ffffffff881684529091529020549091508061081857604051631029081560e21b815260040160405180910390fd5b5f82815260056020908152604080832063ffffffff88168452825280832083805290915281206001015490816001600160401b0381111561085b5761085b611644565b604051908082528060200260200182016040528015610884578160200160208202803683370190505b5090505f5b8381101561097b575f85815260056020908152604080832063ffffffff8b16845282528083208484528252808320600101805482518185028101850190935280835291929091908301828280156108fd57602002820191905f5260205f20905b8154815260200190600101908083116108e9575b509394505f93505050505b81518110801561091757508481105b156109715781818151811061092e5761092e611c02565b602002602001015184828151811061094857610948611c02565b6020026020010181815161095c9190611ec9565b9052508061096981611edc565b915050610908565b5050600101610889565b509695505050505050565b6060805f5f6109958686610dfe565b909450925050505b9250929050565b5f5f6109af83610d5e565b5f908152600160205260409020546001600160a01b03169392505050565b5f60605f5f6109dc8787610dfe565b915091508451825114610a025760405163512509d360e11b815260040160405180910390fd5b5f5b8251811015610a5c57858181518110610a1f57610a1f611c02565b6020026020010151838281518110610a3957610a39611c02565b60200260200101511015610a5457505f93509150610a659050565b600101610a04565b50600193509150505b935093915050565b5f60605f5f610a7c8888610dfe565b90925090505f610a938961022860208b018b611d7d565b83519091508614610ab75760405163512509d360e11b815260040160405180910390fd5b5f5b8351811015610b5b575f612710898984818110610ad857610ad8611c02565b9050602002016020810190610aed9190611ef4565b61ffff16848481518110610b0357610b03611c02565b6020026020010151610b159190611c48565b610b1f9190611f29565b905080858381518110610b3457610b34611c02565b60200260200101511015610b52575f84965096505050505050610b66565b50600101610ab9565b506001945090925050505b94509492505050565b5f5f610b7a84610d5e565b5f90815260066020908152604080832063ffffffff8716845290915290205460ff1691505092915050565b604080518082019091525f8152606060208201525f610bc385610d5e565b5f81815260046020908152604080832063ffffffff891684529091529020549091508310610c0457604051634e23d03560e01b815260040160405180910390fd5b5f81815260056020908152604080832063ffffffff8816845282528083208684528252918290208251808401845281546001600160a01b0316815260018201805485518186028101860190965280865291949293858101939290830182828015610c8b57602002820191905f5260205f20905b815481526020019060010190808311610c77575b5050505050815250509150509392505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27667f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610d0b61103e565b8051602091820120604051610d43949392309101938452602084019290925260408301526001600160a01b0316606082015260800190565b60405160208183030381529060405280519060200120905090565b5f815f0151826020015163ffffffff16604051602001610da992919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261030290611f3c565b60605f610dcd836110b3565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6060805f610e146103c73687900387018761183d565b5f8181526002602052604090205490915063ffffffff161580610e6a57505f8181526002602090815260409091205463ffffffff1690610e5690860186611d7d565b610e609190611f5f565b63ffffffff164211155b610e875760405163640fcd6b60e11b815260040160405180910390fd5b5f81815260066020908152604082209190610ea490870187611d7d565b63ffffffff16815260208101919091526040015f205460ff16610eda57604051630cad17b760e31b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166364e1df84610f166020870187611d7d565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015610f56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7a9190611f7b565b610f9757604051631b14174b60e01b815260040160405180910390fd5b5f610fb2610fa86020870187611d7d565b86602001356102ed565b90505f610fff82610fc66040890189611f9a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506110da92505050565b90505f6110138861022860208a018a611d7d565b5190505f61102f8561102860208b018b611d7d565b85856112e1565b99929850919650505050505050565b60605f61106a7f0000000000000000000000000000000000000000000000000000000000000000610dc1565b9050805f8151811061107e5761107e611c02565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f81111561030257604051632cd44ac360e21b815260040160405180910390fd5b60605f82511180156110f75750604182516110f59190611fdc565b155b61111457604051634be6321b60e01b815260040160405180910390fd5b5f604183516111239190611f29565b9050806001600160401b0381111561113d5761113d611644565b604051908082528060200260200182016040528015611166578160200160208202803683370190505b5091505f5b818110156112d957604080516041808252608082019092525f916020820181803683370190505090505f5b60418110156112015785816111ac856041611c48565b6111b69190611ec9565b815181106111c6576111c6611c02565b602001015160f81c60f81b8282815181106111e3576111e3611c02565b60200101906001600160f81b03191690815f1a905350600101611196565b505f5f61120e888461150b565b90925090505f81600481111561122657611226611fef565b1461124457604051638baa579f60e01b815260040160405180910390fd5b831580611285575085611258600186612003565b8151811061126857611268611c02565b60200260200101516001600160a01b0316826001600160a01b0316115b6112a257604051630b550c5760e41b815260040160405180910390fd5b818685815181106112b5576112b5611c02565b6001600160a01b03929092166020928302919091019091015250505060010161116b565b505092915050565b5f84815260046020908152604080832063ffffffff87168452909152902054606090826001600160401b0381111561131b5761131b611644565b604051908082528060200260200182016040528015611344578160200160208202803683370190505b5091505f5b8451811015611501575f85828151811061136557611365611c02565b602002602001015190505f5f905061139860405180604001604052805f6001600160a01b03168152602001606081525090565b5f5b85811015611461575f8b815260056020908152604080832063ffffffff8e16845282528083208484528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561142957602002820191905f5260205f20905b815481526020019060010190808311611415575b5050505050815250509150836001600160a01b0316825f01516001600160a01b0316036114595760019250611461565b60010161139a565b50816114805760405163439cc0cd60e01b815260040160405180910390fd5b60208101515f5b81518110801561149657508881105b156114f0578181815181106114ad576114ad611c02565b60200260200101518882815181106114c7576114c7611c02565b602002602001018181516114db9190611ec9565b905250806114e881611edc565b915050611487565b505060019093019250611349915050565b5050949350505050565b5f5f825160410361153f576020830151604084015160608501515f1a6115338782858561154a565b9450945050505061099d565b505f9050600261099d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561157f57505f90506003610b66565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156115d0573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166115f8575f60019250925050610b66565b965f9650945050505050565b803563ffffffff81168114611617575f5ffd5b919050565b5f5f6040838503121561162d575f5ffd5b61163683611604565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561168057611680611644565b604052919050565b6001600160a01b038116811461169c575f5ffd5b50565b5f604082840312156116af575f5ffd5b604080519081016001600160401b03811182821017156116d1576116d1611644565b60405290508082356116e281611688565b81526116f060208401611604565b60208201525092915050565b5f5f6060838503121561170d575f5ffd5b611717848461169f565b915061172560408401611604565b90509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61176e602083018461172e565b9392505050565b5f60408284031215611785575f5ffd5b50919050565b5f5f83601f84011261179b575f5ffd5b5081356001600160401b038111156117b1575f5ffd5b6020830191508360208260051b850101111561099d575f5ffd5b5f5f5f5f5f60c086880312156117df575f5ffd5b6117e98787611775565b94506117f760408701611604565b935060608601356001600160401b03811115611811575f5ffd5b61181d8882890161178b565b909450925061183190508760808801611775565b90509295509295909350565b5f6040828403121561184d575f5ffd5b61176e838361169f565b80516001600160a01b03168252602080820151604082850181905281519085018190525f929190910190829060608601905b808310156107b95783518252602082019150602084019350600183019250611889565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561190357603f198786030184526118ee858351611857565b945060209384019391909101906001016118d2565b50929695505050505050565b5f5f60608385031215611920575f5ffd5b6117178484611775565b5f8151808452602084019350602083015f5b8281101561195a57815186526020958601959091019060010161193c565b5093949350505050565b602081525f61176e602083018461192a565b5f60608284031215611785575f5ffd5b5f5f60608385031215611997575f5ffd5b6119a18484611775565b915060408301356001600160401b038111156119bb575f5ffd5b6119c785828601611976565b9150509250929050565b5f8151808452602084019350602083015f5b8281101561195a5781516001600160a01b03168652602095860195909101906001016119e3565b604081525f611a1c604083018561192a565b8281036020840152611a2e81856119d1565b95945050505050565b5f5f5f60808486031215611a49575f5ffd5b611a538585611775565b925060408401356001600160401b03811115611a6d575f5ffd5b611a7986828701611976565b92505060608401356001600160401b03811115611a94575f5ffd5b8401601f81018613611aa4575f5ffd5b80356001600160401b03811115611abd57611abd611644565b8060051b611acd60208201611658565b91825260208184018101929081019089841115611ae8575f5ffd5b6020850194505b83851015611b0e57843580835260209586019590935090910190611aef565b80955050505050509250925092565b8215158152604060208201525f611b3760408301846119d1565b949350505050565b5f5f5f5f60808587031215611b52575f5ffd5b611b5c8686611775565b935060408501356001600160401b03811115611b76575f5ffd5b611b8287828801611976565b93505060608501356001600160401b03811115611b9d575f5ffd5b611ba98782880161178b565b95989497509550505050565b5f5f5f60808486031215611bc7575f5ffd5b611bd1858561169f565b9250611bdf60408501611604565b929592945050506060919091013590565b602081525f61176e6020830184611857565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112611c2a575f5ffd5b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761030257610302611c34565b8135611c6a81611688565b81546001600160a01b0319166001600160a01b0391909116178155602082013536839003601e19018112611c9c575f5ffd5b820180356001600160401b03811115611cb3575f5ffd5b6020820191508060051b3603821315611cca575f5ffd5b600183016001600160401b03821115611ce557611ce5611644565b68010000000000000000821115611cfe57611cfe611644565b805482825580831015611d33575f828152602090208381019082015b80821015611d30575f8255600182019150611d1a565b50505b505f90815260208120905b82811015611d5a57833582820155602090930192600101611d3e565b505050505050565b5f60208284031215611d72575f5ffd5b813561176e81611688565b5f60208284031215611d8d575f5ffd5b61176e82611604565b5f608082018635611da681611688565b6001600160a01b0316835263ffffffff611dc260208901611604565b16602084015263ffffffff861660408401526080606084015283905260a0600584901b83018101908301855f603e1936839003015b87821015611eba57868503609f190184528235818112611e15575f5ffd5b89018035611e2281611688565b6001600160a01b03168652602081013536829003601e19018112611e44575f5ffd5b016020810190356001600160401b03811115611e5e575f5ffd5b8060051b803603831315611e70575f5ffd5b60406020890181905288018290526001600160fb1b03821115611e91575f5ffd5b808360608a01376060818901019750505050602083019250602084019350600182019150611df7565b50929998505050505050505050565b8082018082111561030257610302611c34565b5f60018201611eed57611eed611c34565b5060010190565b5f60208284031215611f04575f5ffd5b813561ffff8116811461176e575f5ffd5b634e487b7160e01b5f52601260045260245ffd5b5f82611f3757611f37611f15565b500490565b80516020808301519190811015611785575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561030257610302611c34565b5f60208284031215611f8b575f5ffd5b8151801515811461176e575f5ffd5b5f5f8335601e19843603018112611faf575f5ffd5b8301803591506001600160401b03821115611fc8575f5ffd5b60200191503681900382131561099d575f5ffd5b5f82611fea57611fea611f15565b500690565b634e487b7160e01b5f52602160045260245ffd5b8181038181111561030257610302611c3456fea2646970667358221220b463450b5f76e4b7a50ae3c7af542a84d37475543ab0a4b17fdfb90e74a3535e64736f6c634300081b0033", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161231938038061231983398101604081905261002e9161016d565b6001600160a01b03821660805280806100468161005b565b60a0525061005490506100a1565b5050610297565b5f5f829050601f8151111561008e578260405163305a27a960e01b8152600401610085919061023c565b60405180910390fd5b805161009982610271565b179392505050565b5f54610100900460ff16156101085760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610085565b5f5460ff90811614610157575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017e575f5ffd5b82516001600160a01b0381168114610194575f5ffd5b60208401519092506001600160401b038111156101af575f5ffd5b8301601f810185136101bf575f5ffd5b80516001600160401b038111156101d8576101d8610159565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020657610206610159565b60405281815282820160200187101561021d575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610291575f198160200360031b1b821691505b50919050565b60805160a05161204c6102cd5f395f8181610342015261104601525f81816101ad015281816103760152610ee4015261204c5ff3fe608060405234801561000f575f5ffd5b5060043610610106575f3560e01c80637c85ac4c1161009e578063be86e0b21161006e578063be86e0b21461026e578063c0da24201461028f578063cd83a72b146102a2578063e49613fc146102c5578063f698da25146102e5575f5ffd5b80637c85ac4c146101fa5780637d1d1f5b1461021a57806380c7d3f31461023a578063848189201461025b575f5ffd5b80635ddb9b5b116100d95780635ddb9b5b1461016d5780636141879e1461019557806368d6e081146101a8578063702ca531146101e7575f5ffd5b8063184674341461010a57806323c2a3cb1461013057806354fd4d501461014357806356d482f514610158575b5f5ffd5b61011d61011836600461161c565b6102ed565b6040519081526020015b60405180910390f35b61011d61013e3660046116fc565b610308565b61014b61033b565b604051610127919061175c565b61016b6101663660046117cb565b61036b565b005b61018061017b36600461183d565b610582565b60405163ffffffff9091168152602001610127565b6101806101a336600461183d565b6105a8565b6101cf7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610127565b61014b6101f536600461161c565b6105ce565b61020d6102083660046116fc565b610665565b60405161012791906118ac565b61022d61022836600461190f565b6107c3565b6040516101279190611964565b61024d610248366004611986565b610986565b604051610127929190611a0a565b6101cf61026936600461183d565b6109a4565b61028161027c366004611a37565b6109cd565b604051610127929190611b1d565b61028161029d366004611b3f565b610a6d565b6102b56102b03660046116fc565b610b6f565b6040519015158152602001610127565b6102d86102d3366004611bb5565b610ba5565b6040516101279190611bf0565b61011d610c9e565b5f6102f883836105ce565b8051906020012090505b92915050565b5f5f61031384610d5e565b5f90815260046020908152604080832063ffffffff8716845290915290205491505092915050565b60606103667f0000000000000000000000000000000000000000000000000000000000000000610dc1565b905090565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103b45760405163030c1b6b60e11b815260040160405180910390fd5b5f6103cc6103c73688900388018861183d565b610d5e565b5f8181526003602052604090205490915063ffffffff9081169086161161040657604051632f20889f60e01b815260040160405180910390fd5b5f81815260046020908152604080832063ffffffff8916845290915281208490555b8381101561048e5784848281811061044257610442611c02565b90506020028101906104549190611c16565b5f83815260056020908152604080832063ffffffff8b168452825280832085845290915290206104848282611c5f565b5050600101610428565b505f818152600360209081526040909120805463ffffffff191663ffffffff88161790556104be90830183611d62565b5f8281526001602090815260409182902080546001600160a01b0319166001600160a01b0394909416939093179092556104fd91908401908401611d7d565b5f828152600260209081526040808320805463ffffffff191663ffffffff958616179055600682528083209389168352929052819020805460ff19166001179055517f4f588da9ec57976194a79b5594f8f8782923d93013df2b9ed12fe125805011ef90610572908890889088908890611d96565b60405180910390a1505050505050565b5f5f61058d83610d5e565b5f9081526003602052604090205463ffffffff169392505050565b5f5f6105b383610d5e565b5f9081526002602052604090205463ffffffff169392505050565b604080517fda346acb3ce99e7c5132bf8cafb159ad8085970ebfdba78007ef0fe163063d1460208083019190915263ffffffff85168284015260608083018590528351808403820181526080909301909352815191012061062d610c9e565b60405161190160f01b602082015260228101919091526042810182905260620160405160208183030381529060405291505092915050565b60605f61067184610d5e565b5f81815260046020908152604080832063ffffffff8089168552925282205492935082166001600160401b038111156106ac576106ac611644565b6040519080825280602002602001820160405280156106f157816020015b604080518082019091525f8152606060208201528152602001906001900390816106ca5790505b5090505f5b8263ffffffff168110156107b9575f84815260056020908152604080832063ffffffff8a16845282528083208484528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561078b57602002820191905f5260205f20905b815481526020019060010190808311610777575b5050505050815250508282815181106107a6576107a6611c02565b60209081029190910101526001016106f6565b5095945050505050565b60605f6107d86103c73686900386018661183d565b5f81815260046020908152604080832063ffffffff881684529091529020549091508061081857604051631029081560e21b815260040160405180910390fd5b5f82815260056020908152604080832063ffffffff88168452825280832083805290915281206001015490816001600160401b0381111561085b5761085b611644565b604051908082528060200260200182016040528015610884578160200160208202803683370190505b5090505f5b8381101561097b575f85815260056020908152604080832063ffffffff8b16845282528083208484528252808320600101805482518185028101850190935280835291929091908301828280156108fd57602002820191905f5260205f20905b8154815260200190600101908083116108e9575b509394505f93505050505b81518110801561091757508481105b156109715781818151811061092e5761092e611c02565b602002602001015184828151811061094857610948611c02565b6020026020010181815161095c9190611ec9565b9052508061096981611edc565b915050610908565b5050600101610889565b509695505050505050565b6060805f5f6109958686610dfe565b909450925050505b9250929050565b5f5f6109af83610d5e565b5f908152600160205260409020546001600160a01b03169392505050565b5f60605f5f6109dc8787610dfe565b915091508451825114610a025760405163512509d360e11b815260040160405180910390fd5b5f5b8251811015610a5c57858181518110610a1f57610a1f611c02565b6020026020010151838281518110610a3957610a39611c02565b60200260200101511015610a5457505f93509150610a659050565b600101610a04565b50600193509150505b935093915050565b5f60605f5f610a7c8888610dfe565b90925090505f610a938961022860208b018b611d7d565b83519091508614610ab75760405163512509d360e11b815260040160405180910390fd5b5f5b8351811015610b5b575f612710898984818110610ad857610ad8611c02565b9050602002016020810190610aed9190611ef4565b61ffff16848481518110610b0357610b03611c02565b6020026020010151610b159190611c48565b610b1f9190611f29565b905080858381518110610b3457610b34611c02565b60200260200101511015610b52575f84965096505050505050610b66565b50600101610ab9565b506001945090925050505b94509492505050565b5f5f610b7a84610d5e565b5f90815260066020908152604080832063ffffffff8716845290915290205460ff1691505092915050565b604080518082019091525f8152606060208201525f610bc385610d5e565b5f81815260046020908152604080832063ffffffff891684529091529020549091508310610c0457604051634e23d03560e01b815260040160405180910390fd5b5f81815260056020908152604080832063ffffffff8816845282528083208684528252918290208251808401845281546001600160a01b0316815260018201805485518186028101860190965280865291949293858101939290830182828015610c8b57602002820191905f5260205f20905b815481526020019060010190808311610c77575b5050505050815250509150509392505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f91ab3d17e3a50a9d89e63fd30b92be7f5336b03b287bb946787a83a9d62a27667f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610d0b61103e565b8051602091820120604051610d43949392309101938452602084019290925260408301526001600160a01b0316606082015260800190565b60405160208183030381529060405280519060200120905090565b5f815f0151826020015163ffffffff16604051602001610da992919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261030290611f3c565b60605f610dcd836110b3565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6060805f610e146103c73687900387018761183d565b5f8181526002602052604090205490915063ffffffff161580610e6a57505f8181526002602090815260409091205463ffffffff1690610e5690860186611d7d565b610e609190611f5f565b63ffffffff164211155b610e875760405163640fcd6b60e11b815260040160405180910390fd5b5f81815260066020908152604082209190610ea490870187611d7d565b63ffffffff16815260208101919091526040015f205460ff16610eda57604051630cad17b760e31b815260040160405180910390fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166364e1df84610f166020870187611d7d565b6040516001600160e01b031960e084901b16815263ffffffff919091166004820152602401602060405180830381865afa158015610f56573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7a9190611f7b565b610f9757604051631b14174b60e01b815260040160405180910390fd5b5f610fb2610fa86020870187611d7d565b86602001356102ed565b90505f610fff82610fc66040890189611f9a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506110da92505050565b90505f6110138861022860208a018a611d7d565b5190505f61102f8561102860208b018b611d7d565b85856112e1565b99929850919650505050505050565b60605f61106a7f0000000000000000000000000000000000000000000000000000000000000000610dc1565b9050805f8151811061107e5761107e611c02565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f81111561030257604051632cd44ac360e21b815260040160405180910390fd5b60605f82511180156110f75750604182516110f59190611fdc565b155b61111457604051634be6321b60e01b815260040160405180910390fd5b5f604183516111239190611f29565b9050806001600160401b0381111561113d5761113d611644565b604051908082528060200260200182016040528015611166578160200160208202803683370190505b5091505f5b818110156112d957604080516041808252608082019092525f916020820181803683370190505090505f5b60418110156112015785816111ac856041611c48565b6111b69190611ec9565b815181106111c6576111c6611c02565b602001015160f81c60f81b8282815181106111e3576111e3611c02565b60200101906001600160f81b03191690815f1a905350600101611196565b505f5f61120e888461150b565b90925090505f81600481111561122657611226611fef565b1461124457604051638baa579f60e01b815260040160405180910390fd5b831580611285575085611258600186612003565b8151811061126857611268611c02565b60200260200101516001600160a01b0316826001600160a01b0316115b6112a257604051630b550c5760e41b815260040160405180910390fd5b818685815181106112b5576112b5611c02565b6001600160a01b03929092166020928302919091019091015250505060010161116b565b505092915050565b5f84815260046020908152604080832063ffffffff87168452909152902054606090826001600160401b0381111561131b5761131b611644565b604051908082528060200260200182016040528015611344578160200160208202803683370190505b5091505f5b8451811015611501575f85828151811061136557611365611c02565b602002602001015190505f5f905061139860405180604001604052805f6001600160a01b03168152602001606081525090565b5f5b85811015611461575f8b815260056020908152604080832063ffffffff8e16845282528083208484528252918290208251808401845281546001600160a01b031681526001820180548551818602810186019096528086529194929385810193929083018282801561142957602002820191905f5260205f20905b815481526020019060010190808311611415575b5050505050815250509150836001600160a01b0316825f01516001600160a01b0316036114595760019250611461565b60010161139a565b50816114805760405163439cc0cd60e01b815260040160405180910390fd5b60208101515f5b81518110801561149657508881105b156114f0578181815181106114ad576114ad611c02565b60200260200101518882815181106114c7576114c7611c02565b602002602001018181516114db9190611ec9565b905250806114e881611edc565b915050611487565b505060019093019250611349915050565b5050949350505050565b5f5f825160410361153f576020830151604084015160608501515f1a6115338782858561154a565b9450945050505061099d565b505f9050600261099d565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561157f57505f90506003610b66565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156115d0573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166115f8575f60019250925050610b66565b965f9650945050505050565b803563ffffffff81168114611617575f5ffd5b919050565b5f5f6040838503121561162d575f5ffd5b61163683611604565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561168057611680611644565b604052919050565b6001600160a01b038116811461169c575f5ffd5b50565b5f604082840312156116af575f5ffd5b604080519081016001600160401b03811182821017156116d1576116d1611644565b60405290508082356116e281611688565b81526116f060208401611604565b60208201525092915050565b5f5f6060838503121561170d575f5ffd5b611717848461169f565b915061172560408401611604565b90509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61176e602083018461172e565b9392505050565b5f60408284031215611785575f5ffd5b50919050565b5f5f83601f84011261179b575f5ffd5b5081356001600160401b038111156117b1575f5ffd5b6020830191508360208260051b850101111561099d575f5ffd5b5f5f5f5f5f60c086880312156117df575f5ffd5b6117e98787611775565b94506117f760408701611604565b935060608601356001600160401b03811115611811575f5ffd5b61181d8882890161178b565b909450925061183190508760808801611775565b90509295509295909350565b5f6040828403121561184d575f5ffd5b61176e838361169f565b80516001600160a01b03168252602080820151604082850181905281519085018190525f929190910190829060608601905b808310156107b95783518252602082019150602084019350600183019250611889565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561190357603f198786030184526118ee858351611857565b945060209384019391909101906001016118d2565b50929695505050505050565b5f5f60608385031215611920575f5ffd5b6117178484611775565b5f8151808452602084019350602083015f5b8281101561195a57815186526020958601959091019060010161193c565b5093949350505050565b602081525f61176e602083018461192a565b5f60608284031215611785575f5ffd5b5f5f60608385031215611997575f5ffd5b6119a18484611775565b915060408301356001600160401b038111156119bb575f5ffd5b6119c785828601611976565b9150509250929050565b5f8151808452602084019350602083015f5b8281101561195a5781516001600160a01b03168652602095860195909101906001016119e3565b604081525f611a1c604083018561192a565b8281036020840152611a2e81856119d1565b95945050505050565b5f5f5f60808486031215611a49575f5ffd5b611a538585611775565b925060408401356001600160401b03811115611a6d575f5ffd5b611a7986828701611976565b92505060608401356001600160401b03811115611a94575f5ffd5b8401601f81018613611aa4575f5ffd5b80356001600160401b03811115611abd57611abd611644565b8060051b611acd60208201611658565b91825260208184018101929081019089841115611ae8575f5ffd5b6020850194505b83851015611b0e57843580835260209586019590935090910190611aef565b80955050505050509250925092565b8215158152604060208201525f611b3760408301846119d1565b949350505050565b5f5f5f5f60808587031215611b52575f5ffd5b611b5c8686611775565b935060408501356001600160401b03811115611b76575f5ffd5b611b8287828801611976565b93505060608501356001600160401b03811115611b9d575f5ffd5b611ba98782880161178b565b95989497509550505050565b5f5f5f60808486031215611bc7575f5ffd5b611bd1858561169f565b9250611bdf60408501611604565b929592945050506060919091013590565b602081525f61176e6020830184611857565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112611c2a575f5ffd5b9190910192915050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761030257610302611c34565b8135611c6a81611688565b81546001600160a01b0319166001600160a01b0391909116178155602082013536839003601e19018112611c9c575f5ffd5b820180356001600160401b03811115611cb3575f5ffd5b6020820191508060051b3603821315611cca575f5ffd5b600183016001600160401b03821115611ce557611ce5611644565b68010000000000000000821115611cfe57611cfe611644565b805482825580831015611d33575f828152602090208381019082015b80821015611d30575f8255600182019150611d1a565b50505b505f90815260208120905b82811015611d5a57833582820155602090930192600101611d3e565b505050505050565b5f60208284031215611d72575f5ffd5b813561176e81611688565b5f60208284031215611d8d575f5ffd5b61176e82611604565b5f608082018635611da681611688565b6001600160a01b0316835263ffffffff611dc260208901611604565b16602084015263ffffffff861660408401526080606084015283905260a0600584901b83018101908301855f603e1936839003015b87821015611eba57868503609f190184528235818112611e15575f5ffd5b89018035611e2281611688565b6001600160a01b03168652602081013536829003601e19018112611e44575f5ffd5b016020810190356001600160401b03811115611e5e575f5ffd5b8060051b803603831315611e70575f5ffd5b60406020890181905288018290526001600160fb1b03821115611e91575f5ffd5b808360608a01376060818901019750505050602083019250602084019350600182019150611df7565b50929998505050505050505050565b8082018082111561030257610302611c34565b5f60018201611eed57611eed611c34565b5060010190565b5f60208284031215611f04575f5ffd5b813561ffff8116811461176e575f5ffd5b634e487b7160e01b5f52601260045260245ffd5b5f82611f3757611f37611f15565b500490565b80516020808301519190811015611785575f1960209190910360031b1b16919050565b63ffffffff818116838216019081111561030257610302611c34565b5f60208284031215611f8b575f5ffd5b8151801515811461176e575f5ffd5b5f5f8335601e19843603018112611faf575f5ffd5b8301803591506001600160401b03821115611fc8575f5ffd5b60200191503681900382131561099d575f5ffd5b5f82611fea57611fea611f15565b500690565b634e487b7160e01b5f52602160045260245ffd5b8181038181111561030257610302611c3456fea26469706673582212205bbd0d358460597f090200a5d0b0d8d0463a87ae80efb5f0d3b1fbae760206cb64736f6c634300081e0033", } // ECDSACertificateVerifierABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Eigen/binding.go b/pkg/bindings/Eigen/binding.go index b6d3be148e..caa02c1ab3 100644 --- a/pkg/bindings/Eigen/binding.go +++ b/pkg/bindings/Eigen/binding.go @@ -38,7 +38,7 @@ type ERC20VotesUpgradeableCheckpoint struct { // EigenMetaData contains all meta data concerning the Eigen contract. var EigenMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CLOCK_MODE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"DOMAIN_SEPARATOR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowance\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowedFrom\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allowedTo\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"approve\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"bEIGEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"balanceOf\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpoints\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pos\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structERC20VotesUpgradeable.Checkpoint\",\"components\":[{\"name\":\"fromBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"votes\",\"type\":\"uint224\",\"internalType\":\"uint224\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clock\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint48\",\"internalType\":\"uint48\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decimals\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"subtractedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegate\",\"inputs\":[{\"name\":\"delegatee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateBySig\",\"inputs\":[{\"name\":\"delegatee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegates\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableTransferRestrictions\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eip712Domain\",\"inputs\":[],\"outputs\":[{\"name\":\"fields\",\"type\":\"bytes1\",\"internalType\":\"bytes1\"},{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"},{\"name\":\"chainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"verifyingContract\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"extensions\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPastTotalSupply\",\"inputs\":[{\"name\":\"timepoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPastVotes\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"timepoint\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getVotes\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseAllowance\",\"inputs\":[{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"addedValue\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"minters\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"mintingAllowances\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"mintAllowedAfters\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mint\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"mintAllowedAfter\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"mintingAllowance\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"multisend\",\"inputs\":[{\"name\":\"receivers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"amounts\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"name\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"numCheckpoints\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permit\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"deadline\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"v\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"r\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"s\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllowedFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowedFrom\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllowedTo\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"isAllowedTo\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"symbol\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalSupply\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transfer\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferRestrictionsDisabledAfter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unwrap\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"wrap\",\"inputs\":[{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Approval\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"spender\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegateChanged\",\"inputs\":[{\"name\":\"delegator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"fromDelegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"toDelegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegateVotesChanged\",\"inputs\":[{\"name\":\"delegate\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"previousBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newBalance\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EIP712DomainChanged\",\"inputs\":[],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Mint\",\"inputs\":[{\"name\":\"minter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"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\":\"SetAllowedFrom\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"isAllowedFrom\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SetAllowedTo\",\"inputs\":[{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"isAllowedTo\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenUnwrapped\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenWrapped\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Transfer\",\"inputs\":[{\"name\":\"from\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"to\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TransferRestrictionsDisabled\",\"inputs\":[],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60c060405234801561000f575f5ffd5b5060405161379b38038061379b83398101604081905261002e9161016a565b8061003881610058565b608052506001600160a01b03821660a05261005161009e565b5050610294565b5f5f829050601f8151111561008b578260405163305a27a960e01b81526004016100829190610239565b60405180910390fd5b80516100968261026e565b179392505050565b5f54610100900460ff16156101055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610082565b5f5460ff90811614610154575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017b575f5ffd5b82516001600160a01b0381168114610191575f5ffd5b60208401519092506001600160401b038111156101ac575f5ffd5b8301601f810185136101bc575f5ffd5b80516001600160401b038111156101d5576101d5610156565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020357610203610156565b60405281815282820160200187101561021a575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561028e575f198160200360031b1b821691505b50919050565b60805160a0516134d16102ca5f395f818161034c01528181610852015281816114dd01526115fb01525f610a1401526134d15ff3fe608060405234801561000f575f5ffd5b5060043610610260575f3560e01c80637ecebe001161014b578063a9059cbb116100bf578063dd62ed3e11610084578063dd62ed3e146105cc578063de0e9a3e146105df578063ea598cb0146105f2578063eb415f4514610605578063f1127ed81461060d578063f2fde38b1461064a575f5ffd5b8063a9059cbb1461056d578063aad41a4114610580578063b8c2559414610593578063c3cda520146105a6578063d505accf146105b9575f5ffd5b806391ddadf41161011057806391ddadf41461050357806395d89b41146105225780639ab24eb01461052a5780639aec4bae1461053d578063a457c2d714610547578063a7d1195d1461055a575f5ffd5b80637ecebe001461049157806381b97161146104a457806384b0196e146104c45780638da5cb5b146104df5780638e539e8c146104f0575f5ffd5b80633a46b1a8116101e2578063587cde1e116101a7578063587cde1e146103d85780635c19a95c146104035780636fcfff451461041657806370a082311461043e578063715018a61461046657806378aa33ba1461046e575f5ffd5b80633a46b1a8146103345780633f4da4c6146103475780634bf5d7e91461038657806353957125146103b057806354fd4d50146103d0575f5ffd5b80631ffacdef116102285780631ffacdef146102e457806323b872dd146102f7578063313ce5671461030a5780633644e515146103195780633950935114610321575f5ffd5b80630455e6941461026457806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b5f5ffd5b610287610272366004612d08565b6101336020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a461065d565b6040516102939190612d4f565b6102876102bf366004612d61565b6106ed565b6102cc610706565b005b6102d661084f565b604051908152602001610293565b6102cc6102f2366004612d96565b6108d5565b610287610305366004612dcb565b61093d565b60405160128152602001610293565b6102d6610960565b61028761032f366004612d61565b610969565b6102d6610342366004612d61565b61098a565b61036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d66103be366004612d08565b6101306020525f908152604090205481565b6102a4610a0d565b61036e6103e6366004612d08565b6001600160a01b039081165f90815260fe60205260409020541690565b6102cc610411366004612d08565b610a38565b610429610424366004612d08565b610a45565b60405163ffffffff9091168152602001610293565b6102d661044c366004612d08565b6001600160a01b03165f9081526065602052604090205490565b6102cc610a66565b61028761047c366004612d08565b6101346020525f908152604090205460ff1681565b6102d661049f366004612d08565b610a79565b6102d66104b2366004612d08565b6101316020525f908152604090205481565b6104cc610a96565b6040516102939796959493929190612e05565b6033546001600160a01b031661036e565b6102d66104fe366004612e9b565b610b2f565b61050b610b96565b60405165ffffffffffff9091168152602001610293565b6102a4610ba0565b6102d6610538366004612d08565b610baf565b6102d66101325481565b610287610555366004612d61565b610c2c565b6102cc610568366004612f7a565b610ca6565b61028761057b366004612d61565b6110ba565b6102cc61058e3660046130bf565b6110c7565b6102cc6105a1366004612d96565b611197565b6102cc6105b436600461313b565b6111f7565b6102cc6105c736600461318f565b61132c565b6102d66105da3660046131f5565b61148d565b6102cc6105ed366004612e9b565b6114b7565b6102cc610600366004612e9b565b6115d9565b6102cc611700565b61062061061b366004613226565b6117c7565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610658366004612d08565b611848565b60606068805461066c90613258565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613258565b80156106e35780601f106106ba576101008083540402835291602001916106e3565b820191905f5260205f20905b8154815290600101906020018083116106c657829003601f168201915b5050505050905090565b5f336106fa8185856118be565b60019150505b92915050565b335f908152610131602052604090205461077f5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b335f908152610130602052604090205442116107f75760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610776565b335f8181526101316020526040812080549190559061081690826119e1565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885906020015b60405180910390a250565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d0919061328a565b905090565b6108dd611a77565b6001600160a01b0382165f8181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b5f3361094a858285611ad1565b610955858585611b43565b506001949350505050565b5f6108d0611cfd565b5f336106fa81858561097b838361148d565b61098591906132b5565b6118be565b5f610993610b96565b65ffffffffffff1682106109e55760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610776565b6001600160a01b0383165f90815260ff60205260409020610a069083611d06565b9392505050565b60606108d07f0000000000000000000000000000000000000000000000000000000000000000611de7565b610a423382611e24565b50565b6001600160a01b0381165f90815260ff602052604081205461070090611e9d565b610a6e611a77565b610a775f611f05565b565b6001600160a01b0381165f90815260cb6020526040812054610700565b5f6060805f5f5f60606097545f5f1b148015610ab25750609854155b610af65760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610776565b610afe611f56565b610b06611f65565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f610b38610b96565b65ffffffffffff168210610b8a5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610776565b61070061010083611d06565b5f6108d042611f74565b60606069805461066c90613258565b6001600160a01b0381165f90815260ff60205260408120548015610c1a576001600160a01b0383165f90815260ff6020526040902080545f198301908110610bf957610bf96132c8565b5f9182526020909120015464010000000090046001600160e01b0316610c1c565b5f5b6001600160e01b03169392505050565b5f3381610c39828661148d565b905083811015610c995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610776565b61095582868684036118be565b5f54610100900460ff1615808015610cc457505f54600160ff909116105b80610cdd5750303b158015610cdd57505f5460ff166001145b610d405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610776565b5f805460ff191660011790558015610d61575f805461ff0019166101001790555b610d69611fda565b610dad6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250612008565b610db685611f05565b610ddc6040518060400160405280600581526020016422a4a3a2a760d91b81525061203c565b8251845114610e635760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610776565b8151845114610eea5760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610776565b5f5b845181101561106757838181518110610f0757610f076132c8565b60200260200101516101315f878481518110610f2557610f256132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550828181518110610f6257610f626132c8565b60200260200101516101305f878481518110610f8057610f806132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f208190555060016101335f878481518110610fc357610fc36132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908315150217905550848181518110611012576110126132c8565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051611057911515815260200190565b60405180910390a2600101610eec565b505f196101325580156110b3575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b5f336106fa818585611b43565b82811461113c5760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610776565b5f5b838110156110b35761118f3386868481811061115c5761115c6132c8565b90506020020160208101906111719190612d08565b858585818110611183576111836132c8565b90506020020135611b43565b60010161113e565b61119f611a77565b6001600160a01b0382165f8181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b9101610931565b834211156112475760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610776565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f906112c0906112b89060a00160405160208183030381529060405280519060200120612085565b8585856120b1565b90506112cb816120d7565b86146113195760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610776565b6113238188611e24565b50505050505050565b8342111561137c5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610776565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113aa8c6120d7565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61140482612085565b90505f611413828787876120b1565b9050896001600160a01b0316816001600160a01b0316146114765760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610776565b6114818a8a8a6118be565b50505050505050505050565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205490565b6114c133826120fe565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303815f875af115801561152b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154f91906132dc565b6115a75760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610776565b60405181815233907f7f8146ca1ae17ad17561461ef221d97c8160bfddcae0edb68f53ce8dc5ce4af390602001610844565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015611649573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166d91906132dc565b6116c45760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610776565b6116ce33826119e1565b60405181815233907f2273a99739c31a37346636a3013c2cedebee7cd5b4c560faded39d298c1dd45c90602001610844565b611708611a77565b5f1961013254146117975760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610776565b5f6101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b604080518082019091525f80825260208201526001600160a01b0383165f90815260ff60205260409020805463ffffffff8416908110611809576118096132c8565b5f9182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b611850611a77565b6001600160a01b0381166118b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610776565b610a4281611f05565b6001600160a01b0383166119205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610776565b6001600160a01b0382166119815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610776565b6001600160a01b038381165f8181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6119eb8282612117565b6001600160e01b036119fb61084f565b1115611a625760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610776565b611a716101006121e8836121f3565b50505050565b6033546001600160a01b03163314610a775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610776565b5f611adc848461148d565b90505f198114611a715781811015611b365760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610776565b611a7184848484036118be565b6001600160a01b038316611ba75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610776565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610776565b611c1483838361235f565b6001600160a01b0383165f9081526065602052604090205481811015611c8b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610776565b6001600160a01b038085165f8181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cea9086815260200190565b60405180910390a3611a71848484612443565b5f6108d0612474565b81545f9081816005811115611d5d575f611d1f846124e7565b611d2990856132f7565b5f88815260209020909150869082015463ffffffff161115611d4d57809150611d5b565b611d588160016132b5565b92505b505b80821015611da8575f611d7083836125cb565b5f88815260209020909150869082015463ffffffff161115611d9457809150611da2565b611d9f8160016132b5565b92505b50611d5d565b8015611dd2575f8681526020902081015f19015464010000000090046001600160e01b0316611dd4565b5f5b6001600160e01b03169695505050505050565b60605f611df3836125e5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b038281165f81815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611a7182848361260c565b5f63ffffffff821115611f015760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610776565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606099805461066c90613258565b6060609a805461066c90613258565b5f65ffffffffffff821115611f015760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610776565b5f54610100900460ff166120005760405162461bcd60e51b81526004016107769061330a565b610a77612746565b5f54610100900460ff1661202e5760405162461bcd60e51b81526004016107769061330a565b6120388282612775565b5050565b5f54610100900460ff166120625760405162461bcd60e51b81526004016107769061330a565b610a4281604051806040016040528060018152602001603160f81b8152506127b4565b5f610700612091611cfd565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f6120c087878787612801565b915091506120cd816128be565b5095945050505050565b6001600160a01b0381165f90815260cb602052604090208054600181018255905b50919050565b6121088282612a07565b611a71610100612b4a836121f3565b6001600160a01b03821661216d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610776565b6121785f838361235f565b8060675f82825461218991906132b5565b90915550506001600160a01b0382165f818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36120385f8383612443565b5f610a0682846132b5565b82545f90819081811561223d575f8781526020902082015f190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612251565b604080518082019091525f80825260208201525b905080602001516001600160e01b0316935061227184868863ffffffff16565b92505f821180156122995750612285610b96565b65ffffffffffff16815f015163ffffffff16145b156122dc576122a783612b55565b5f8881526020902083015f190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612355565b8660405180604001604052806123006122f3610b96565b65ffffffffffff16611e9d565b63ffffffff16815260200161231486612b55565b6001600160e01b0390811690915282546001810184555f938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b61013254421161243e576001600160a01b038316158061238657506001600160a01b038216155b806123a957506001600160a01b0383165f908152610133602052604090205460ff165b806123cc57506001600160a01b0382165f908152610134602052604090205460ff165b61243e5760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610776565b505050565b6001600160a01b038381165f90815260fe602052604080822054858416835291205461243e9291821691168361260c565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61249e612bbd565b6124a6612c15565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f815f036124f657505f919050565b5f600161250284612c45565b901c6001901b9050600181848161251b5761251b613355565b048201901c9050600181848161253357612533613355565b048201901c9050600181848161254b5761254b613355565b048201901c9050600181848161256357612563613355565b048201901c9050600181848161257b5761257b613355565b048201901c9050600181848161259357612593613355565b048201901c905060018184816125ab576125ab613355565b048201901c9050610a06818285816125c5576125c5613355565b04612cd8565b5f6125d96002848418613369565b610a06908484166132b5565b5f60ff8216601f81111561070057604051632cd44ac360e21b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415801561262d57505f81115b1561243e576001600160a01b038316156126ba576001600160a01b0383165f90815260ff60205260408120819061266790612b4a856121f3565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516126af929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561243e576001600160a01b0382165f90815260ff6020526040812081906126ef906121e8856121f3565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612737929190918252602082015260400190565b60405180910390a25050505050565b5f54610100900460ff1661276c5760405162461bcd60e51b81526004016107769061330a565b610a7733611f05565b5f54610100900460ff1661279b5760405162461bcd60e51b81526004016107769061330a565b60686127a783826133cc565b50606961243e82826133cc565b5f54610100900460ff166127da5760405162461bcd60e51b81526004016107769061330a565b60996127e683826133cc565b50609a6127f382826133cc565b50505f609781905560985550565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561283657505f905060036128b5565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612887573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166128af575f600192509250506128b5565b91505f90505b94509492505050565b5f8160048111156128d1576128d1613487565b036128d95750565b60018160048111156128ed576128ed613487565b0361293a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610776565b600281600481111561294e5761294e613487565b0361299b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610776565b60038160048111156129af576129af613487565b03610a425760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610776565b6001600160a01b038216612a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610776565b612a72825f8361235f565b6001600160a01b0382165f9081526065602052604090205481811015612ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610776565b6001600160a01b0383165f8181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361243e835f84612443565b5f610a0682846132f7565b5f6001600160e01b03821115611f015760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610776565b5f5f612bc7611f56565b805190915015612bde578051602090910120919050565b6097548015612bed5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f612c1f611f65565b805190915015612c36578051602090910120919050565b6098548015612bed5792915050565b5f80608083901c15612c5957608092831c92015b604083901c15612c6b57604092831c92015b602083901c15612c7d57602092831c92015b601083901c15612c8f57601092831c92015b600883901c15612ca157600892831c92015b600483901c15612cb357600492831c92015b600283901c15612cc557600292831c92015b600183901c156107005760010192915050565b5f818310612ce65781610a06565b5090919050565b80356001600160a01b0381168114612d03575f5ffd5b919050565b5f60208284031215612d18575f5ffd5b610a0682612ced565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a066020830184612d21565b5f5f60408385031215612d72575f5ffd5b612d7b83612ced565b946020939093013593505050565b8015158114610a42575f5ffd5b5f5f60408385031215612da7575f5ffd5b612db083612ced565b91506020830135612dc081612d89565b809150509250929050565b5f5f5f60608486031215612ddd575f5ffd5b612de684612ced565b9250612df460208501612ced565b929592945050506040919091013590565b60ff60f81b8816815260e060208201525f612e2360e0830189612d21565b8281036040840152612e358189612d21565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015612e8a578351835260209384019390920191600101612e6c565b50909b9a5050505050505050505050565b5f60208284031215612eab575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612eef57612eef612eb2565b604052919050565b5f67ffffffffffffffff821115612f1057612f10612eb2565b5060051b60200190565b5f82601f830112612f29575f5ffd5b8135612f3c612f3782612ef7565b612ec6565b8082825260208201915060208360051b860101925085831115612f5d575f5ffd5b602085015b838110156120cd578035835260209283019201612f62565b5f5f5f5f60808587031215612f8d575f5ffd5b612f9685612ced565b9350602085013567ffffffffffffffff811115612fb1575f5ffd5b8501601f81018713612fc1575f5ffd5b8035612fcf612f3782612ef7565b8082825260208201915060208360051b850101925089831115612ff0575f5ffd5b6020840193505b828410156130195761300884612ced565b825260209384019390910190612ff7565b9550505050604085013567ffffffffffffffff811115613037575f5ffd5b61304387828801612f1a565b925050606085013567ffffffffffffffff81111561305f575f5ffd5b61306b87828801612f1a565b91505092959194509250565b5f5f83601f840112613087575f5ffd5b50813567ffffffffffffffff81111561309e575f5ffd5b6020830191508360208260051b85010111156130b8575f5ffd5b9250929050565b5f5f5f5f604085870312156130d2575f5ffd5b843567ffffffffffffffff8111156130e8575f5ffd5b6130f487828801613077565b909550935050602085013567ffffffffffffffff811115613113575f5ffd5b61311f87828801613077565b95989497509550505050565b803560ff81168114612d03575f5ffd5b5f5f5f5f5f5f60c08789031215613150575f5ffd5b61315987612ced565b955060208701359450604087013593506131756060880161312b565b9598949750929560808101359460a0909101359350915050565b5f5f5f5f5f5f5f60e0888a0312156131a5575f5ffd5b6131ae88612ced565b96506131bc60208901612ced565b955060408801359450606088013593506131d86080890161312b565b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215613206575f5ffd5b61320f83612ced565b915061321d60208401612ced565b90509250929050565b5f5f60408385031215613237575f5ffd5b61324083612ced565b9150602083013563ffffffff81168114612dc0575f5ffd5b600181811c9082168061326c57607f821691505b6020821081036120f857634e487b7160e01b5f52602260045260245ffd5b5f6020828403121561329a575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610700576107006132a1565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156132ec575f5ffd5b8151610a0681612d89565b81810381811115610700576107006132a1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f8261338357634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561243e57805f5260205f20601f840160051c810160208510156133ad5750805b601f840160051c820191505b818110156110b3575f81556001016133b9565b815167ffffffffffffffff8111156133e6576133e6612eb2565b6133fa816133f48454613258565b84613388565b6020601f82116001811461342c575f83156134155750848201515b5f19600385901b1c1916600184901b1784556110b3565b5f84815260208120601f198516915b8281101561345b578785015182556020948501946001909201910161343b565b508482101561347857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea2646970667358221220a4af477d2fecb794e35b6ec5fa2d04e4b411a737cab2f1395a0bff02fd38ef1e64736f6c634300081b0033", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161379b38038061379b83398101604081905261002e9161016a565b8061003881610058565b608052506001600160a01b03821660a05261005161009e565b5050610294565b5f5f829050601f8151111561008b578260405163305a27a960e01b81526004016100829190610239565b60405180910390fd5b80516100968261026e565b179392505050565b5f54610100900460ff16156101055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610082565b5f5460ff90811614610154575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017b575f5ffd5b82516001600160a01b0381168114610191575f5ffd5b60208401519092506001600160401b038111156101ac575f5ffd5b8301601f810185136101bc575f5ffd5b80516001600160401b038111156101d5576101d5610156565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020357610203610156565b60405281815282820160200187101561021a575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561028e575f198160200360031b1b821691505b50919050565b60805160a0516134d16102ca5f395f818161034c01528181610852015281816114dd01526115fb01525f610a1401526134d15ff3fe608060405234801561000f575f5ffd5b5060043610610260575f3560e01c80637ecebe001161014b578063a9059cbb116100bf578063dd62ed3e11610084578063dd62ed3e146105cc578063de0e9a3e146105df578063ea598cb0146105f2578063eb415f4514610605578063f1127ed81461060d578063f2fde38b1461064a575f5ffd5b8063a9059cbb1461056d578063aad41a4114610580578063b8c2559414610593578063c3cda520146105a6578063d505accf146105b9575f5ffd5b806391ddadf41161011057806391ddadf41461050357806395d89b41146105225780639ab24eb01461052a5780639aec4bae1461053d578063a457c2d714610547578063a7d1195d1461055a575f5ffd5b80637ecebe001461049157806381b97161146104a457806384b0196e146104c45780638da5cb5b146104df5780638e539e8c146104f0575f5ffd5b80633a46b1a8116101e2578063587cde1e116101a7578063587cde1e146103d85780635c19a95c146104035780636fcfff451461041657806370a082311461043e578063715018a61461046657806378aa33ba1461046e575f5ffd5b80633a46b1a8146103345780633f4da4c6146103475780634bf5d7e91461038657806353957125146103b057806354fd4d50146103d0575f5ffd5b80631ffacdef116102285780631ffacdef146102e457806323b872dd146102f7578063313ce5671461030a5780633644e515146103195780633950935114610321575f5ffd5b80630455e6941461026457806306fdde031461029c578063095ea7b3146102b15780631249c58b146102c457806318160ddd146102ce575b5f5ffd5b610287610272366004612d08565b6101336020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6102a461065d565b6040516102939190612d4f565b6102876102bf366004612d61565b6106ed565b6102cc610706565b005b6102d661084f565b604051908152602001610293565b6102cc6102f2366004612d96565b6108d5565b610287610305366004612dcb565b61093d565b60405160128152602001610293565b6102d6610960565b61028761032f366004612d61565b610969565b6102d6610342366004612d61565b61098a565b61036e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610293565b60408051808201909152600e81526d06d6f64653d74696d657374616d760941b60208201526102a4565b6102d66103be366004612d08565b6101306020525f908152604090205481565b6102a4610a0d565b61036e6103e6366004612d08565b6001600160a01b039081165f90815260fe60205260409020541690565b6102cc610411366004612d08565b610a38565b610429610424366004612d08565b610a45565b60405163ffffffff9091168152602001610293565b6102d661044c366004612d08565b6001600160a01b03165f9081526065602052604090205490565b6102cc610a66565b61028761047c366004612d08565b6101346020525f908152604090205460ff1681565b6102d661049f366004612d08565b610a79565b6102d66104b2366004612d08565b6101316020525f908152604090205481565b6104cc610a96565b6040516102939796959493929190612e05565b6033546001600160a01b031661036e565b6102d66104fe366004612e9b565b610b2f565b61050b610b96565b60405165ffffffffffff9091168152602001610293565b6102a4610ba0565b6102d6610538366004612d08565b610baf565b6102d66101325481565b610287610555366004612d61565b610c2c565b6102cc610568366004612f7a565b610ca6565b61028761057b366004612d61565b6110ba565b6102cc61058e3660046130bf565b6110c7565b6102cc6105a1366004612d96565b611197565b6102cc6105b436600461313b565b6111f7565b6102cc6105c736600461318f565b61132c565b6102d66105da3660046131f5565b61148d565b6102cc6105ed366004612e9b565b6114b7565b6102cc610600366004612e9b565b6115d9565b6102cc611700565b61062061061b366004613226565b6117c7565b60408051825163ffffffff1681526020928301516001600160e01b03169281019290925201610293565b6102cc610658366004612d08565b611848565b60606068805461066c90613258565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613258565b80156106e35780601f106106ba576101008083540402835291602001916106e3565b820191905f5260205f20905b8154815290600101906020018083116106c657829003601f168201915b5050505050905090565b5f336106fa8185856118be565b60019150505b92915050565b335f908152610131602052604090205461077f5760405162461bcd60e51b815260206004820152602f60248201527f456967656e2e6d696e743a206d73672e73656e64657220686173206e6f206d6960448201526e6e74696e6720616c6c6f77616e636560881b60648201526084015b60405180910390fd5b335f908152610130602052604090205442116107f75760405162461bcd60e51b815260206004820152603160248201527f456967656e2e6d696e743a206d73672e73656e646572206973206e6f7420616c6044820152701b1bddd959081d1bc81b5a5b9d081e595d607a1b6064820152608401610776565b335f8181526101316020526040812080549190559061081690826119e1565b60405181815233907f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d4121396885906020015b60405180910390a250565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d0919061328a565b905090565b6108dd611a77565b6001600160a01b0382165f8181526101336020908152604091829020805460ff191685151590811790915591519182527fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed284362227191015b60405180910390a25050565b5f3361094a858285611ad1565b610955858585611b43565b506001949350505050565b5f6108d0611cfd565b5f336106fa81858561097b838361148d565b61098591906132b5565b6118be565b5f610993610b96565b65ffffffffffff1682106109e55760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610776565b6001600160a01b0383165f90815260ff60205260409020610a069083611d06565b9392505050565b60606108d07f0000000000000000000000000000000000000000000000000000000000000000611de7565b610a423382611e24565b50565b6001600160a01b0381165f90815260ff602052604081205461070090611e9d565b610a6e611a77565b610a775f611f05565b565b6001600160a01b0381165f90815260cb6020526040812054610700565b5f6060805f5f5f60606097545f5f1b148015610ab25750609854155b610af65760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b6044820152606401610776565b610afe611f56565b610b06611f65565b604080515f80825260208201909252600f60f81b9b939a50919850469750309650945092509050565b5f610b38610b96565b65ffffffffffff168210610b8a5760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b6044820152606401610776565b61070061010083611d06565b5f6108d042611f74565b60606069805461066c90613258565b6001600160a01b0381165f90815260ff60205260408120548015610c1a576001600160a01b0383165f90815260ff6020526040902080545f198301908110610bf957610bf96132c8565b5f9182526020909120015464010000000090046001600160e01b0316610c1c565b5f5b6001600160e01b03169392505050565b5f3381610c39828661148d565b905083811015610c995760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610776565b61095582868684036118be565b5f54610100900460ff1615808015610cc457505f54600160ff909116105b80610cdd5750303b158015610cdd57505f5460ff166001145b610d405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610776565b5f805460ff191660011790558015610d61575f805461ff0019166101001790555b610d69611fda565b610dad6040518060400160405280600581526020016422b4b3b2b760d91b8152506040518060400160405280600581526020016422a4a3a2a760d91b815250612008565b610db685611f05565b610ddc6040518060400160405280600581526020016422a4a3a2a760d91b81525061203c565b8251845114610e635760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74696e67416c6c6f77616e636573206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610776565b8151845114610eea5760405162461bcd60e51b815260206004820152604760248201527f456967656e2e696e697469616c697a653a206d696e7465727320616e64206d6960448201527f6e74416c6c6f776564416674657273206d757374206265207468652073616d65606482015266040d8cadccee8d60cb1b608482015260a401610776565b5f5b845181101561106757838181518110610f0757610f076132c8565b60200260200101516101315f878481518110610f2557610f256132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550828181518110610f6257610f626132c8565b60200260200101516101305f878481518110610f8057610f806132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f208190555060016101335f878481518110610fc357610fc36132c8565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff021916908315150217905550848181518110611012576110126132c8565b60200260200101516001600160a01b03167fcf20b1ecb604b0e8888d579c64e8a3b10e590d45c1c2dddb393bed28436222716001604051611057911515815260200190565b60405180910390a2600101610eec565b505f196101325580156110b3575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b5f336106fa818585611b43565b82811461113c5760405162461bcd60e51b815260206004820152603e60248201527f456967656e2e6d756c746973656e643a2072656365697665727320616e64206160448201527f6d6f756e7473206d757374206265207468652073616d65206c656e67746800006064820152608401610776565b5f5b838110156110b35761118f3386868481811061115c5761115c6132c8565b90506020020160208101906111719190612d08565b858585818110611183576111836132c8565b90506020020135611b43565b60010161113e565b61119f611a77565b6001600160a01b0382165f8181526101346020908152604091829020805460ff191685151590811790915591519182527f72a561d1af7409467dae4f1e9fc52590a9335a1dda17727e2b6aa8c4db35109b9101610931565b834211156112475760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e617475726520657870697265640000006044820152606401610776565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b0388169181019190915260608101869052608081018590525f906112c0906112b89060a00160405160208183030381529060405280519060200120612085565b8585856120b1565b90506112cb816120d7565b86146113195760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e6365000000000000006044820152606401610776565b6113238188611e24565b50505050505050565b8342111561137c5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152606401610776565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886113aa8c6120d7565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61140482612085565b90505f611413828787876120b1565b9050896001600160a01b0316816001600160a01b0316146114765760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152606401610776565b6114818a8a8a6118be565b50505050505050505050565b6001600160a01b039182165f90815260666020908152604080832093909416825291909152205490565b6114c133826120fe565b60405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303815f875af115801561152b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061154f91906132dc565b6115a75760405162461bcd60e51b8152602060048201526024808201527f456967656e2e756e777261703a2062454947454e207472616e736665722066616044820152631a5b195960e21b6064820152608401610776565b60405181815233907f7f8146ca1ae17ad17561461ef221d97c8160bfddcae0edb68f53ce8dc5ce4af390602001610844565b6040516323b872dd60e01b8152336004820152306024820152604481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015611649573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166d91906132dc565b6116c45760405162461bcd60e51b815260206004820152602260248201527f456967656e2e777261703a2062454947454e207472616e73666572206661696c604482015261195960f21b6064820152608401610776565b6116ce33826119e1565b60405181815233907f2273a99739c31a37346636a3013c2cedebee7cd5b4c560faded39d298c1dd45c90602001610844565b611708611a77565b5f1961013254146117975760405162461bcd60e51b815260206004820152604d60248201527f456967656e2e64697361626c655472616e736665725265737472696374696f6e60448201527f733a207472616e73666572207265737472696374696f6e732061726520616c7260648201526c1958591e48191a5cd8589b1959609a1b608482015260a401610776565b5f6101328190556040517f2b18986d3ba809db2f13a5d7bf17f60d357b37d9cbb55dd71cbbac8dc4060f649190a1565b604080518082019091525f80825260208201526001600160a01b0383165f90815260ff60205260409020805463ffffffff8416908110611809576118096132c8565b5f9182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b611850611a77565b6001600160a01b0381166118b55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610776565b610a4281611f05565b6001600160a01b0383166119205760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610776565b6001600160a01b0382166119815760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610776565b6001600160a01b038381165f8181526066602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6119eb8282612117565b6001600160e01b036119fb61084f565b1115611a625760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b6064820152608401610776565b611a716101006121e8836121f3565b50505050565b6033546001600160a01b03163314610a775760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610776565b5f611adc848461148d565b90505f198114611a715781811015611b365760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610776565b611a7184848484036118be565b6001600160a01b038316611ba75760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610776565b6001600160a01b038216611c095760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610776565b611c1483838361235f565b6001600160a01b0383165f9081526065602052604090205481811015611c8b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610776565b6001600160a01b038085165f8181526065602052604080822086860390559286168082529083902080548601905591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611cea9086815260200190565b60405180910390a3611a71848484612443565b5f6108d0612474565b81545f9081816005811115611d5d575f611d1f846124e7565b611d2990856132f7565b5f88815260209020909150869082015463ffffffff161115611d4d57809150611d5b565b611d588160016132b5565b92505b505b80821015611da8575f611d7083836125cb565b5f88815260209020909150869082015463ffffffff161115611d9457809150611da2565b611d9f8160016132b5565b92505b50611d5d565b8015611dd2575f8681526020902081015f19015464010000000090046001600160e01b0316611dd4565b5f5b6001600160e01b03169695505050505050565b60605f611df3836125e5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b038281165f81815260fe6020818152604080842080546065845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a4611a7182848361260c565b5f63ffffffff821115611f015760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b6064820152608401610776565b5090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60606099805461066c90613258565b6060609a805461066c90613258565b5f65ffffffffffff821115611f015760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b6064820152608401610776565b5f54610100900460ff166120005760405162461bcd60e51b81526004016107769061330a565b610a77612746565b5f54610100900460ff1661202e5760405162461bcd60e51b81526004016107769061330a565b6120388282612775565b5050565b5f54610100900460ff166120625760405162461bcd60e51b81526004016107769061330a565b610a4281604051806040016040528060018152602001603160f81b8152506127b4565b5f610700612091611cfd565b8360405161190160f01b8152600281019290925260228201526042902090565b5f5f5f6120c087878787612801565b915091506120cd816128be565b5095945050505050565b6001600160a01b0381165f90815260cb602052604090208054600181018255905b50919050565b6121088282612a07565b611a71610100612b4a836121f3565b6001600160a01b03821661216d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610776565b6121785f838361235f565b8060675f82825461218991906132b5565b90915550506001600160a01b0382165f818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36120385f8383612443565b5f610a0682846132b5565b82545f90819081811561223d575f8781526020902082015f190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b03166020820152612251565b604080518082019091525f80825260208201525b905080602001516001600160e01b0316935061227184868863ffffffff16565b92505f821180156122995750612285610b96565b65ffffffffffff16815f015163ffffffff16145b156122dc576122a783612b55565b5f8881526020902083015f190180546001600160e01b03929092166401000000000263ffffffff909216919091179055612355565b8660405180604001604052806123006122f3610b96565b65ffffffffffff16611e9d565b63ffffffff16815260200161231486612b55565b6001600160e01b0390811690915282546001810184555f938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b61013254421161243e576001600160a01b038316158061238657506001600160a01b038216155b806123a957506001600160a01b0383165f908152610133602052604090205460ff165b806123cc57506001600160a01b0382165f908152610134602052604090205460ff165b61243e5760405162461bcd60e51b815260206004820152603a60248201527f456967656e2e5f6265666f7265546f6b656e5472616e736665723a2066726f6d60448201527f206f7220746f206d7573742062652077686974656c69737465640000000000006064820152608401610776565b505050565b6001600160a01b038381165f90815260fe602052604080822054858416835291205461243e9291821691168361260c565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61249e612bbd565b6124a6612c15565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f815f036124f657505f919050565b5f600161250284612c45565b901c6001901b9050600181848161251b5761251b613355565b048201901c9050600181848161253357612533613355565b048201901c9050600181848161254b5761254b613355565b048201901c9050600181848161256357612563613355565b048201901c9050600181848161257b5761257b613355565b048201901c9050600181848161259357612593613355565b048201901c905060018184816125ab576125ab613355565b048201901c9050610a06818285816125c5576125c5613355565b04612cd8565b5f6125d96002848418613369565b610a06908484166132b5565b5f60ff8216601f81111561070057604051632cd44ac360e21b815260040160405180910390fd5b816001600160a01b0316836001600160a01b03161415801561262d57505f81115b1561243e576001600160a01b038316156126ba576001600160a01b0383165f90815260ff60205260408120819061266790612b4a856121f3565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516126af929190918252602082015260400190565b60405180910390a250505b6001600160a01b0382161561243e576001600160a01b0382165f90815260ff6020526040812081906126ef906121e8856121f3565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612737929190918252602082015260400190565b60405180910390a25050505050565b5f54610100900460ff1661276c5760405162461bcd60e51b81526004016107769061330a565b610a7733611f05565b5f54610100900460ff1661279b5760405162461bcd60e51b81526004016107769061330a565b60686127a783826133cc565b50606961243e82826133cc565b5f54610100900460ff166127da5760405162461bcd60e51b81526004016107769061330a565b60996127e683826133cc565b50609a6127f382826133cc565b50505f609781905560985550565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561283657505f905060036128b5565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612887573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166128af575f600192509250506128b5565b91505f90505b94509492505050565b5f8160048111156128d1576128d1613487565b036128d95750565b60018160048111156128ed576128ed613487565b0361293a5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610776565b600281600481111561294e5761294e613487565b0361299b5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610776565b60038160048111156129af576129af613487565b03610a425760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610776565b6001600160a01b038216612a675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610776565b612a72825f8361235f565b6001600160a01b0382165f9081526065602052604090205481811015612ae55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610776565b6001600160a01b0383165f8181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361243e835f84612443565b5f610a0682846132f7565b5f6001600160e01b03821115611f015760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b6064820152608401610776565b5f5f612bc7611f56565b805190915015612bde578051602090910120919050565b6097548015612bed5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b5f5f612c1f611f65565b805190915015612c36578051602090910120919050565b6098548015612bed5792915050565b5f80608083901c15612c5957608092831c92015b604083901c15612c6b57604092831c92015b602083901c15612c7d57602092831c92015b601083901c15612c8f57601092831c92015b600883901c15612ca157600892831c92015b600483901c15612cb357600492831c92015b600283901c15612cc557600292831c92015b600183901c156107005760010192915050565b5f818310612ce65781610a06565b5090919050565b80356001600160a01b0381168114612d03575f5ffd5b919050565b5f60208284031215612d18575f5ffd5b610a0682612ced565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a066020830184612d21565b5f5f60408385031215612d72575f5ffd5b612d7b83612ced565b946020939093013593505050565b8015158114610a42575f5ffd5b5f5f60408385031215612da7575f5ffd5b612db083612ced565b91506020830135612dc081612d89565b809150509250929050565b5f5f5f60608486031215612ddd575f5ffd5b612de684612ced565b9250612df460208501612ced565b929592945050506040919091013590565b60ff60f81b8816815260e060208201525f612e2360e0830189612d21565b8281036040840152612e358189612d21565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015612e8a578351835260209384019390920191600101612e6c565b50909b9a5050505050505050505050565b5f60208284031215612eab575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612eef57612eef612eb2565b604052919050565b5f67ffffffffffffffff821115612f1057612f10612eb2565b5060051b60200190565b5f82601f830112612f29575f5ffd5b8135612f3c612f3782612ef7565b612ec6565b8082825260208201915060208360051b860101925085831115612f5d575f5ffd5b602085015b838110156120cd578035835260209283019201612f62565b5f5f5f5f60808587031215612f8d575f5ffd5b612f9685612ced565b9350602085013567ffffffffffffffff811115612fb1575f5ffd5b8501601f81018713612fc1575f5ffd5b8035612fcf612f3782612ef7565b8082825260208201915060208360051b850101925089831115612ff0575f5ffd5b6020840193505b828410156130195761300884612ced565b825260209384019390910190612ff7565b9550505050604085013567ffffffffffffffff811115613037575f5ffd5b61304387828801612f1a565b925050606085013567ffffffffffffffff81111561305f575f5ffd5b61306b87828801612f1a565b91505092959194509250565b5f5f83601f840112613087575f5ffd5b50813567ffffffffffffffff81111561309e575f5ffd5b6020830191508360208260051b85010111156130b8575f5ffd5b9250929050565b5f5f5f5f604085870312156130d2575f5ffd5b843567ffffffffffffffff8111156130e8575f5ffd5b6130f487828801613077565b909550935050602085013567ffffffffffffffff811115613113575f5ffd5b61311f87828801613077565b95989497509550505050565b803560ff81168114612d03575f5ffd5b5f5f5f5f5f5f60c08789031215613150575f5ffd5b61315987612ced565b955060208701359450604087013593506131756060880161312b565b9598949750929560808101359460a0909101359350915050565b5f5f5f5f5f5f5f60e0888a0312156131a5575f5ffd5b6131ae88612ced565b96506131bc60208901612ced565b955060408801359450606088013593506131d86080890161312b565b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215613206575f5ffd5b61320f83612ced565b915061321d60208401612ced565b90509250929050565b5f5f60408385031215613237575f5ffd5b61324083612ced565b9150602083013563ffffffff81168114612dc0575f5ffd5b600181811c9082168061326c57607f821691505b6020821081036120f857634e487b7160e01b5f52602260045260245ffd5b5f6020828403121561329a575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610700576107006132a1565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156132ec575f5ffd5b8151610a0681612d89565b81810381811115610700576107006132a1565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f8261338357634e487b7160e01b5f52601260045260245ffd5b500490565b601f82111561243e57805f5260205f20601f840160051c810160208510156133ad5750805b601f840160051c820191505b818110156110b3575f81556001016133b9565b815167ffffffffffffffff8111156133e6576133e6612eb2565b6133fa816133f48454613258565b84613388565b6020601f82116001811461342c575f83156134155750848201515b5f19600385901b1c1916600184901b1784556110b3565b5f84815260208120601f198516915b8281101561345b578785015182556020948501946001909201910161343b565b508482101561347857868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212200061494d8167a8a7baa17e40e304b79a3113f30944ddd99d5c3d462abf5587ed64736f6c634300081e0033", } // EigenABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/EigenPod/binding.go b/pkg/bindings/EigenPod/binding.go index 16524242c5..e24b5a6142 100644 --- a/pkg/bindings/EigenPod/binding.go +++ b/pkg/bindings/EigenPod/binding.go @@ -85,8 +85,8 @@ type IEigenPodTypesWithdrawalRequest struct { // EigenPodMetaData contains all meta data concerning the EigenPod contract. var EigenPodMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LeavesNotPowerOfTwo\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEnoughLeaves\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161495a38038061495a83398101604081905261002e91610188565b806100388161005f565b608052506001600160a01b0380841660a052821660c0526100576100a5565b5050506102b9565b5f5f829050601f81511115610092578260405163305a27a960e01b8152600401610089919061025e565b60405180910390fd5b805161009d82610293565b179392505050565b5f54610100900460ff161561010c5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610089565b5f5460ff9081161461015b575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610171575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f6060848603121561019a575f5ffd5b83516101a58161015d565b60208501519093506101b68161015d565b60408501519092506001600160401b038111156101d1575f5ffd5b8401601f810186136101e1575f5ffd5b80516001600160401b038111156101fa576101fa610174565b604051601f8201601f19908116603f011681016001600160401b038111828210171561022857610228610174565b60405281815282820160200188101561023f575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102b3575f198160200360031b1b821691505b50919050565b60805160a05160c0516146156103455f395f8181610329015281816106d40152818161077c01528181610a2a01528181610deb01528181610fe5015281816110f0015281816115f1015281816116980152818161192101528181611c6f01528181611da301528181612279015261318301525f818161057a015261170101525f61105101526146155ff3fe6080604052600436106101bd575f3560e01c80636691954e116100f2578063b522538a11610092578063d06d558711610062578063d06d55871461063f578063dda3346c1461065e578063ee94d67c1461067d578063f074ba621461069c575f5ffd5b8063b522538a146105ce578063c44e30dc146105ed578063c490744214610601578063c4d66de814610620575f5ffd5b80637439841f116100cd5780637439841f1461053457806374cdd7981461056957806388676cad1461059c5780639b4e4634146105bb575f5ffd5b80636691954e146104d65780636c0d2d5a146104e95780636fcd0e5314610508575f5ffd5b806342ecff2a1161015d57806352396a591161013857806352396a591461043657806354fd4d501461046a578063587533571461048b57806358eaee79146104aa575f5ffd5b806342ecff2a146102f25780634665bcda1461031857806347d283721461034b575f5ffd5b80632340e8d3116101985780632340e8d31461027a5780633474aa161461028f5780633f5fa57a146102c05780633f65cf19146102d3575f5ffd5b8063039157d2146101fb5780630b18ff661461021c5780631e51553314610258575f5ffd5b366101f7576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b348015610206575f5ffd5b5061021a610215366004613abc565b6106bb565b005b348015610227575f5ffd5b5060335461023b906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610263575f5ffd5b5061026c6109f0565b60405190815260200161024f565b348015610285575f5ffd5b5061026c60395481565b34801561029a575f5ffd5b506034546001600160401b03165b6040516001600160401b03909116815260200161024f565b61021a6102ce366004613b77565b610a11565b3480156102de575f5ffd5b5061021a6102ed366004613bb5565b610d92565b3480156102fd575f5ffd5b50603a546102a890600160401b90046001600160401b031681565b348015610323575f5ffd5b5061023b7f000000000000000000000000000000000000000000000000000000000000000081565b348015610356575f5ffd5b506103db6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161024f91905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b348015610441575f5ffd5b506102a8610450366004613c8c565b603b6020525f90815260409020546001600160401b031681565b348015610475575f5ffd5b5061047e61104a565b60405161024f9190613cd5565b348015610496575f5ffd5b50603e5461023b906001600160a01b031681565b3480156104b5575f5ffd5b506104c96104c4366004613d24565b611075565b60405161024f9190613d8a565b61021a6104e4366004613b77565b6110d7565b3480156104f4575f5ffd5b5061026c610503366004613c8c565b6113df565b348015610513575f5ffd5b50610527610522366004613d98565b6114ed565b60405161024f9190613daf565b34801561053f575f5ffd5b506104c961054e366004613d98565b5f90815260366020526040902054600160c01b900460ff1690565b348015610574575f5ffd5b5061023b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a7575f5ffd5b5061021a6105b6366004613e0f565b611598565b61021a6105c9366004613e2a565b61168d565b3480156105d9575f5ffd5b506105276105e8366004613d24565b61180b565b3480156105f8575f5ffd5b5061026c6118fa565b34801561060c575f5ffd5b5061021a61061b366004613ebf565b611916565b34801561062b575f5ffd5b5061021a61063a366004613ee9565b611a4d565b34801561064a575f5ffd5b5061021a610659366004613ee9565b611b97565b348015610669575f5ffd5b5061021a610678366004613fd4565b611c2b565b348015610688575f5ffd5b50603a546102a8906001600160401b031681565b3480156106a7575f5ffd5b5061021a6106b63660046140a6565b611d8a565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610721573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610745919061410d565b156107635760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156107c9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ed919061410d565b1561080b5760405163840a48d560e01b815260040160405180910390fd5b5f61084f6108198580614128565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061218692505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156108bd576108bd613d56565b60028111156108ce576108ce613d56565b81525050905080604001516001600160401b0316876001600160401b03161161090a576040516337e07ffd60e01b815260040160405180910390fd5b60018160600151600281111561092257610922613d56565b146109405760405163d49e19a760e01b815260040160405180910390fd5b61098361094d8680614128565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506121a892505050565b6109a05760405163161ce5ed60e31b815260040160405180910390fd5b6109b26109ac886113df565b876121d0565b6109de6109be88612275565b87356109ca8880614128565b6109d760208b018b61416d565b875161234c565b6109e75f612480565b50505050505050565b5f610a0c71bbddc7ce488642fb579f8b00f3a590007251612600565b905090565b604051635ac86ab760e01b8152600a60048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a77573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a9b919061410d565b15610ab95760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b0316331480610adc5750603e546001600160a01b031633145b610af95760405163427a777960e01b815260040160405180910390fd5b5f610b026118fa565b90505f610b0f84836141c3565b905080341015610b325760405163356680b760e01b815260040160405180910390fd5b5f610b3d82346141da565b90505f5b85811015610d795736878783818110610b5c57610b5c6141ed565b9050602002810190610b6e9190614201565b90505f610bb7610b7e838061416d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268692505050565b905060015f82815260366020526040902054600160c01b900460ff166002811115610be457610be4613d56565b14610c025760405163d49e19a760e01b815260040160405180910390fd5b5f610c0d838061416d565b610c1d6040860160208701613c8c565b604051602001610c2f9392919061421f565b60405160208183030381529060405290505f710961ef480eb55e80d19ad83579a64c0070026001600160a01b03168883604051610c6c9190614257565b5f6040518083038185875af1925050503d805f8114610ca6576040519150601f19603f3d011682016040523d82523d5f602084013e610cab565b606091505b5050905080610ccd5760405163fc52d48360e01b815260040160405180910390fd5b610cdd6040850160208601613c8c565b6001600160401b03165f03610d1b5760405183907f60d8ca014d4765a2b8b389e25714cb1cef83b574222911a01d90c1bd69d2d320905f90a2610d69565b827f8b2737bb64ab2f2dc09552dfa1c250399e6a42c7ea9f0e1c658f5d65d708ec05610d4d6040870160208801613c8c565b6040516001600160401b03909116815260200160405180910390a25b505060019092019150610b419050565b508015610d8a57610d8a3382612717565b505050505050565b6033546001600160a01b0316331480610db55750603e546001600160a01b031633145b610dd25760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610e38573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5c919061410d565b15610e7a5760405163840a48d560e01b815260040160405180910390fd5b8584148015610e8857508382145b610ea5576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610edb576040516337e07ffd60e01b815260040160405180910390fd5b603a546001600160401b03908116908a1611610f0a576040516335e7f6b760e01b815260040160405180910390fd5b610f1c610f168a6113df565b896121d0565b5f805b87811015610fb557610fa18b8b358b8b85818110610f3f57610f3f6141ed565b9050602002016020810190610f549190614262565b8a8a86818110610f6657610f666141ed565b9050602002810190610f78919061416d565b8a8a88818110610f8a57610f8a6141ed565b9050602002810190610f9c9190614128565b61282c565b610fab9083614286565b9150600101610f1f565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015611028575f5ffd5b505af115801561103a573d5f5f3e3d5ffd5b5050505050505050505050505050565b6060610a0c7f0000000000000000000000000000000000000000000000000000000000000000612d2d565b5f5f6110b584848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268692505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b604051635ac86ab760e01b8152600960048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561113d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611161919061410d565b1561117f5760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b03163314806111a25750603e546001600160a01b031633145b6111bf5760405163427a777960e01b815260040160405180910390fd5b5f6111c86109f0565b90505f6111d584836141c3565b9050803410156111f85760405163356680b760e01b815260040160405180910390fd5b5f61120382346141da565b90505f5b85811015610d795736878783818110611222576112226141ed565b90506020028101906112349190614201565b90505f611244610b7e838061416d565b90505f611257610b7e602085018561416d565b905060015f82815260366020526040902054600160c01b900460ff16600281111561128457611284613d56565b146112a25760405163d49e19a760e01b815260040160405180910390fd5b5f6112ad848061416d565b6112ba602087018761416d565b6040516020016112cd9493929190614299565b60405160208183030381529060405290505f71bbddc7ce488642fb579f8b00f3a5900072516001600160a01b0316898360405161130a9190614257565b5f6040518083038185875af1925050503d805f8114611344576040519150601f19603f3d011682016040523d82523d5f602084013e611349565b606091505b505090508061136b5760405163fc52d48360e01b815260040160405180910390fd5b8284036113a15760405184907fc97b965b92ae7fd20095fe8eb7b99f81f95f8c4adffb22a19116d8eb2846b016905f90a26113ce565b604051839085907f42f9c9db2ca443e9ec62f4588bd0c9b241065c02c2a8001ac164ae1282dc7b94905f90a35b505060019093019250611207915050565b5f6113ed611fff600c6141c3565b6114006001600160401b038416426141da565b1061141e57604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f198184030181529082905261146591614257565b5f60405180830381855afa9150503d805f811461149d576040519150601f19603f3d011682016040523d82523d5f602084013e6114a2565b606091505b50915091508180156114b457505f8151115b6114d15760405163558ad0a360e01b815260040160405180910390fd5b808060200190518101906114e591906142b8565b949350505050565b611514604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561157e5761157e613d56565b600281111561158f5761158f613d56565b90525092915050565b6033546001600160a01b03163314806115bb5750603e546001600160a01b031633145b6115d85760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561163e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611662919061410d565b156116805760405163840a48d560e01b815260040160405180910390fd5b61168982612480565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116d657604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec800000146116ff5760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008787611742612d6a565b8888886040518863ffffffff1660e01b8152600401611766969594939291906142f7565b5f604051808303818588803b15801561177d575f5ffd5b505af115801561178f573d5f5f3e3d5ffd5b50505050507fa01003766d3cd97cf2ade5429690bf5d206be7fb01ef9d3a0089ecf67bc112196117f386868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268692505050565b60405190815260200160405180910390a15050505050565b611832604080516080810182525f8082526020820181905291810182905290606082015290565b60365f61187385858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061268692505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff1660028111156118df576118df613d56565b60028111156118f0576118f0613d56565b9052509392505050565b5f610a0c710961ef480eb55e80d19ad83579a64c007002612600565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461195f57604051633213a66160e21b815260040160405180910390fd5b5f61196e633b9aca0083614359565b9050611987633b9aca006001600160401b0383166141c3565b6034549092506001600160401b0390811690821611156119ba576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906119d79084906001600160401b031661436c565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e83604051611a3691815260200190565b60405180910390a2611a488383612717565b505050565b5f54610100900460ff1615808015611a6b57505f54600160ff909116105b80611a845750303b158015611a8457505f5460ff166001145b611aec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611b0d575f805461ff0019166101001790555b6001600160a01b038216611b34576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015611689575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b03163314611bc25760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314611c565760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611cbc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ce0919061410d565b15611cfe5760405163840a48d560e01b815260040160405180910390fd5b8251845114611d20576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611d8357611d7b83858381518110611d4157611d416141ed565b6020026020010151878481518110611d5b57611d5b6141ed565b60200260200101516001600160a01b0316612d9a9092919063ffffffff16565b600101611d22565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e14919061410d565b15611e325760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f819003611e6657604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b90049091166080820152611ecd611ec583612275565b825188612dec565b5f805b8581101561212d5736878783818110611eeb57611eeb6141ed565b9050602002810190611efd919061438b565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611f6d57611f6d613d56565b6002811115611f7e57611f7e613d56565b9052509050600181606001516002811115611f9b57611f9b613d56565b14611fa7575050612125565b856001600160401b031681604001516001600160401b031610611fcb575050612125565b5f8080611fdb848a8f3588612ead565b60208b0180519396509194509250611ff28261439f565b62ffffff1690525060808801805184919061200e9083906143bc565b6001600160401b031690525060608801805183919061202e9083906143db565b60070b90525061203e81886143bc565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b8360028111156120e2576120e2613d56565b021790555050604051863591506001600160401b038b16907fe4866335761a51dcaff766448ab0af6064291ee5dc94e68492bb9cd757c1e350905f90a350505050505b600101611ed0565b506001600160401b038084165f908152603b6020526040812080548493919291612159918591166143bc565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506109e782612fc3565b5f815f81518110612199576121996141ed565b60200260200101519050919050565b5f816003815181106121bc576121bc6141ed565b60200260200101515f5f1b14159050919050565b6121dc600360206141c3565b6121e9602083018361416d565b905014612209576040516313717da960e21b815260040160405180910390fd5b612258612219602083018361416d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250869250508435905060036131e3565b611689576040516309bde33960e01b815260040160405180910390fd5b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122f7919061440a565b9050806001600160401b03165f03612322576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b03161115612343576001612345565b5f5b9392505050565b6008841461236d5760405163200591bd60e01b815260040160405180910390fd5b5f61237788613218565b90508061238660286001614286565b6123909190614286565b61239b9060206141c3565b83146123ba576040516313717da960e21b815260040160405180910390fd5b5f6123f68787808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061324092505050565b90505f64ffffffffff841661240d60286001614286565b600b901b17905061245786868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d92508691508590506131e3565b612474576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b0316156124b05760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b034281169116036124de576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b03166124fa633b9aca0047614359565b612504919061436c565b905081801561251a57506001600160401b038116155b15612538576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a0016040528061254d426113df565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff00000000000000001990921691909117905590506125b181612fc3565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f5f836001600160a01b03166040515f60405180830381855afa9150503d805f8114612648576040519150601f19603f3d011682016040523d82523d5f602084013e61264d565b606091505b5091509150818015612660575080516020145b61267d5760405163c90158af60e01b815260040160405180910390fd5b6114e581614425565b5f81516030146126a957604051634f88323960e11b815260040160405180910390fd5b6040516002906126bf9084905f90602001614448565b60408051601f19818403018152908290526126d991614257565b602060405180830381855afa1580156126f4573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906110d191906142b8565b804710156127675760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611ae3565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146127b0576040519150601f19603f3d011682016040523d82523d5f602084013e6127b5565b606091505b5050905080611a485760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611ae3565b5f5f6128698484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061218692505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff1660028111156128d7576128d7613d56565b60028111156128e8576128e8613d56565b90525090505f8160600151600281111561290457612904613d56565b14612922576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b0380166129678686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061350e92505050565b6001600160401b03160361298e57604051631958236d60e21b815260040160405180910390fd5b6001600160401b0380166129d38686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061353292505050565b6001600160401b0316146129fa57604051632eade63760e01b815260040160405180910390fd5b612a02612d6a565b612a0b90614425565b612a468686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061354992505050565b1480612a9b5750612a5561355d565b612a5e90614425565b612a998686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061354992505050565b145b612ab857604051633772dd5360e11b815260040160405180910390fd5b5f612af48686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061357992505050565b9050612b0d612b028c612275565b8b88888c8c8f61234c565b60398054905f612b1c8361446c565b9091555050603a545f90600160401b90046001600160401b031615612b5357603a54600160401b90046001600160401b0316612b60565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612c3557612c35613d56565b021790555050603d8054849250601390612c60908490600160981b90046001600160401b03166143bc565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f101790c2993f6a4d962bd17c786126823ba1c4cf04ff4cccb2659d50fb20aee884604051612cb591815260200190565b60405180910390a1604080518581526001600160401b03838116602083015284168183015290517fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f9181900360600190a1612d1d633b9aca006001600160401b0384166141c3565b9c9b505050505050505050505050565b60605f612d3983613590565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b604051606090612d8690600160f81b905f903090602001614484565b604051602081830303815290604052905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052611a489084906135b7565b5f612df684613218565b9050612e03816003614286565b612e0e9060206141c3565b612e1b602084018461416d565b905014612e3b576040516313717da960e21b815260040160405180910390fd5b6003811b600c17612e90612e52602085018561416d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892505086359050846131e3565b611d83576040516309bde33960e01b815260040160405180910390fd5b5f5f5f866020015192505f612ec686895f01518761368a565b9050836001600160401b0316816001600160401b031614612f3a57612eeb84826144c2565b60408051873581526001600160401b038a8116602083015284168183015290519194507fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f919081900360600190a15b6001600160401b0380821660208a0181905290881660408a01525f03612fb85760398054905f612f69836144f1565b909155505060026060890152612f7e83614506565b6040519092508535906001600160401b038916907f5ce0aa04ae51d52da6e680fbe0336d2e2432f7c3dc2d4f3193204c57b9072107905f90a35b509450945094915050565b8051603c556020810151603d805460408401516060850151608086015162ffffff9095166affffffffffffffffffffff19909316831763010000006001600160401b0393841602176fffffffffffffffffffffffffffffffff60581b1916600160581b9183169190910267ffffffffffffffff60981b191617600160981b9190941602929092179055156130545750565b60808101516034545f91613070916001600160401b03166143bc565b90505f8260600151836040015161308791906143db565b60408401516034805492935090915f906130ab9084906001600160401b03166143bc565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f91506130fb90633b9aca009085166141c3565b90505f613110633b9aca00600785900b61452b565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b1580156131c6575f5ffd5b505af11580156131d8573d5f5f3e3d5ffd5b505050505050505050565b5f83613202576040516329e7276760e11b815260040160405180910390fd5b8361320e868585613768565b1495945050505050565b5f8082600181111561322c5761322c613d56565b146132385760066110d1565b600592915050565b5f60018251116132635760405163f8ef036760e01b815260040160405180910390fd5b61326d825161385b565b61328a5760405163f6558f5160e01b815260040160405180910390fd5b5f600283516132999190614359565b90505f816001600160401b038111156132b4576132b4613f04565b6040519080825280602002602001820160405280156132dd578160200160208202803683370190505b5090505f5b828110156133d7576002856132f783836141c3565b81518110613307576133076141ed565b60200260200101518683600261331d91906141c3565b613328906001614286565b81518110613338576133386141ed565b602002602001015160405160200161335a929190918252602082015260400190565b60408051601f198184030181529082905261337491614257565b602060405180830381855afa15801561338f573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906133b291906142b8565b8282815181106133c4576133c46141ed565b60209081029190910101526001016132e2565b505b816001146134eb576133ec600283614359565b91505f5b828110156134e55760028261340583836141c3565b81518110613415576134156141ed565b60200260200101518383600261342b91906141c3565b613436906001614286565b81518110613446576134466141ed565b6020026020010151604051602001613468929190918252602082015260400190565b60408051601f198184030181529082905261348291614257565b602060405180830381855afa15801561349d573d5f5f3e3d5ffd5b5050506040513d601f19601f820116820180604052508101906134c091906142b8565b8282815181106134d2576134d26141ed565b60209081029190910101526001016133f0565b506133d9565b805f815181106134fd576134fd6141ed565b602002602001015192505050919050565b5f6110d182600581518110613525576135256141ed565b602002602001015161387a565b5f6110d182600681518110613525576135256141ed565b5f81600181518110612199576121996141ed565b604051606090612d8690600160f91b905f903090602001614484565b5f6110d182600281518110613525576135256141ed565b5f60ff8216601f8111156110d157604051632cd44ac360e21b815260040160405180910390fd5b5f61360b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138e19092919063ffffffff16565b905080515f148061362b57508080602001905181019061362b919061410d565b611a485760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611ae3565b5f61369760266001614286565b6136a29060206141c3565b6136af604084018461416d565b9050146136cf576040516313717da960e21b815260040160405180910390fd5b5f6136db60048561455a565b64ffffffffff1690506137346136f4604085018561416d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525089925050506020860135846131e3565b613751576040516309bde33960e01b815260040160405180910390fd5b61375f8360200135856138ef565b95945050505050565b5f83515f141580156137855750602084516137839190614583565b155b6137a2576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b85518111613832576137c6600285614583565b5f036137f85781515f528086015160205260208260405f60026107d05a03fa6137ed575f5ffd5b600284049350613820565b808601515f52815160205260208260405f60026107d05a03fa613819575f5ffd5b6002840493505b61382b602082614286565b90506137b3565b508215613852576040516363df817160e01b815260040160405180910390fd5b51949350505050565b5f81158015906110d157506138716001836141da565b82161592915050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b60606114e584845f8561391b565b5f806138fc600484614596565b6139079060406145bf565b64ffffffffff1690506114e584821b61387a565b60608247101561397c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ae3565b5f5f866001600160a01b031685876040516139979190614257565b5f6040518083038185875af1925050503d805f81146139d1576040519150601f19603f3d011682016040523d82523d5f602084013e6139d6565b606091505b50915091506139e7878383876139f2565b979650505050505050565b60608315613a605782515f03613a59576001600160a01b0385163b613a595760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ae3565b50816114e5565b6114e58383815115613a755781518083602001fd5b8060405162461bcd60e51b8152600401611ae39190613cd5565b6001600160401b0381168114613aa3575f5ffd5b50565b5f60408284031215613ab6575f5ffd5b50919050565b5f5f5f60608486031215613ace575f5ffd5b8335613ad981613a8f565b925060208401356001600160401b03811115613af3575f5ffd5b613aff86828701613aa6565b92505060408401356001600160401b03811115613b1a575f5ffd5b613b2686828701613aa6565b9150509250925092565b5f5f83601f840112613b40575f5ffd5b5081356001600160401b03811115613b56575f5ffd5b6020830191508360208260051b8501011115613b70575f5ffd5b9250929050565b5f5f60208385031215613b88575f5ffd5b82356001600160401b03811115613b9d575f5ffd5b613ba985828601613b30565b90969095509350505050565b5f5f5f5f5f5f5f5f60a0898b031215613bcc575f5ffd5b8835613bd781613a8f565b975060208901356001600160401b03811115613bf1575f5ffd5b613bfd8b828c01613aa6565b97505060408901356001600160401b03811115613c18575f5ffd5b613c248b828c01613b30565b90975095505060608901356001600160401b03811115613c42575f5ffd5b613c4e8b828c01613b30565b90955093505060808901356001600160401b03811115613c6c575f5ffd5b613c788b828c01613b30565b999c989b5096995094979396929594505050565b5f60208284031215613c9c575f5ffd5b813561234581613a8f565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6123456020830184613ca7565b5f5f83601f840112613cf7575f5ffd5b5081356001600160401b03811115613d0d575f5ffd5b602083019150836020828501011115613b70575f5ffd5b5f5f60208385031215613d35575f5ffd5b82356001600160401b03811115613d4a575f5ffd5b613ba985828601613ce7565b634e487b7160e01b5f52602160045260245ffd5b60038110613d8657634e487b7160e01b5f52602160045260245ffd5b9052565b602081016110d18284613d6a565b5f60208284031215613da8575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b0360408401511660408301526060830151613dfb6060840182613d6a565b5092915050565b8015158114613aa3575f5ffd5b5f60208284031215613e1f575f5ffd5b813561234581613e02565b5f5f5f5f5f60608688031215613e3e575f5ffd5b85356001600160401b03811115613e53575f5ffd5b613e5f88828901613ce7565b90965094505060208601356001600160401b03811115613e7d575f5ffd5b613e8988828901613ce7565b96999598509660400135949350505050565b6001600160a01b0381168114613aa3575f5ffd5b8035613eba81613e9b565b919050565b5f5f60408385031215613ed0575f5ffd5b8235613edb81613e9b565b946020939093013593505050565b5f60208284031215613ef9575f5ffd5b813561234581613e9b565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613f4057613f40613f04565b604052919050565b5f6001600160401b03821115613f6057613f60613f04565b5060051b60200190565b5f82601f830112613f79575f5ffd5b8135613f8c613f8782613f48565b613f18565b8082825260208201915060208360051b860101925085831115613fad575f5ffd5b602085015b83811015613fca578035835260209283019201613fb2565b5095945050505050565b5f5f5f60608486031215613fe6575f5ffd5b83356001600160401b03811115613ffb575f5ffd5b8401601f8101861361400b575f5ffd5b8035614019613f8782613f48565b8082825260208201915060208360051b85010192508883111561403a575f5ffd5b6020840193505b8284101561406557833561405481613e9b565b825260209384019390910190614041565b955050505060208401356001600160401b03811115614082575f5ffd5b61408e86828701613f6a565b92505061409d60408501613eaf565b90509250925092565b5f5f5f604084860312156140b8575f5ffd5b83356001600160401b038111156140cd575f5ffd5b6140d986828701613aa6565b93505060208401356001600160401b038111156140f4575f5ffd5b61410086828701613b30565b9497909650939450505050565b5f6020828403121561411d575f5ffd5b815161234581613e02565b5f5f8335601e1984360301811261413d575f5ffd5b8301803591506001600160401b03821115614156575f5ffd5b6020019150600581901b3603821315613b70575f5ffd5b5f5f8335601e19843603018112614182575f5ffd5b8301803591506001600160401b0382111561419b575f5ffd5b602001915036819003821315613b70575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176110d1576110d16141af565b818103818111156110d1576110d16141af565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112614215575f5ffd5b9190910192915050565b8284823760c09190911b6001600160c01b0319169101908152600801919050565b5f81518060208401855e5f93019283525090919050565b5f6123458284614240565b5f60208284031215614272575f5ffd5b813564ffffffffff81168114612345575f5ffd5b808201808211156110d1576110d16141af565b838582375f8482015f8152838582375f93019283525090949350505050565b5f602082840312156142c8575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b608081525f61430a60808301888a6142cf565b828103602084015261431c8188613ca7565b905082810360408401526143318186886142cf565b915050826060830152979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261436757614367614345565b500490565b6001600160401b0382811682821603908111156110d1576110d16141af565b5f8235605e19833603018112614215575f5ffd5b5f62ffffff8216806143b3576143b36141af565b5f190192915050565b6001600160401b0381811683821601908111156110d1576110d16141af565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff19821217156110d1576110d16141af565b5f6020828403121561441a575f5ffd5b815161234581613a8f565b80516020808301519190811015613ab6575f1960209190910360031b1b16919050565b5f6144538285614240565b6001600160801b03199390931683525050601001919050565b5f6001820161447d5761447d6141af565b5060010190565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff821317156110d1576110d16141af565b5f816144ff576144ff6141af565b505f190190565b5f8160070b677fffffffffffffff198103614523576145236141af565b5f0392915050565b8082025f8212600160ff1b84141615614546576145466141af565b81810583148215176110d1576110d16141af565b5f64ffffffffff83168061457057614570614345565b8064ffffffffff84160491505092915050565b5f8261459157614591614345565b500690565b5f64ffffffffff8316806145ac576145ac614345565b8064ffffffffff84160691505092915050565b64ffffffffff8181168382160290811690818114613dfb57613dfb6141af56fea2646970667358221220905476a9bc91953440c84d770e9b89fddd5a8856c845405968955c8c2a0995e264736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodManager\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"receive\",\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amountWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidValidatorFieldsLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LeavesNotPowerOfTwo\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEnoughLeaves\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161473838038061473883398101604081905261002e91610123565b6001600160a01b03808316608052811660a052610049610050565b505061015b565b5f54610100900460ff16156100bb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161461010a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610120575f5ffd5b50565b5f5f60408385031215610134575f5ffd5b825161013f8161010c565b60208401519092506101508161010c565b809150509250929050565b60805160a05161455a6101de5f395f818161031e015281816106a801528181610750015281816109fe01528181610dbf01528181610fb9015281816110990152818161159a01528181611641015281816118ca01528181611c1801528181611d4c0152818161222201526130ef01525f818161054e01526116aa015261455a5ff3fe6080604052600436106101b2575f3560e01c80636c0d2d5a116100e7578063c44e30dc11610087578063d06d558711610062578063d06d558714610613578063dda3346c14610632578063ee94d67c14610651578063f074ba6214610670575f5ffd5b8063c44e30dc146105c1578063c4907442146105d5578063c4d66de8146105f4575f5ffd5b806374cdd798116100c257806374cdd7981461053d57806388676cad146105705780639b4e46341461058f578063b522538a146105a2575f5ffd5b80636c0d2d5a146104bd5780636fcd0e53146104dc5780637439841f14610508575f5ffd5b806342ecff2a1161015257806352396a591161012d57806352396a591461042b578063587533571461045f57806358eaee791461047e5780636691954e146104aa575f5ffd5b806342ecff2a146102e75780634665bcda1461030d57806347d2837214610340575f5ffd5b80632340e8d31161018d5780632340e8d31461026f5780633474aa16146102845780633f5fa57a146102b55780633f65cf19146102c8575f5ffd5b8063039157d2146101f05780630b18ff66146102115780631e5155331461024d575f5ffd5b366101ec576040513481527f6fdd3dbdb173299608c0aa9f368735857c8842b581f8389238bf05bd04b3bf499060200160405180910390a1005b5f5ffd5b3480156101fb575f5ffd5b5061020f61020a366004613a01565b61068f565b005b34801561021c575f5ffd5b50603354610230906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b348015610258575f5ffd5b506102616109c4565b604051908152602001610244565b34801561027a575f5ffd5b5061026160395481565b34801561028f575f5ffd5b506034546001600160401b03165b6040516001600160401b039091168152602001610244565b61020f6102c3366004613abc565b6109e5565b3480156102d3575f5ffd5b5061020f6102e2366004613afa565b610d66565b3480156102f2575f5ffd5b50603a5461029d90600160401b90046001600160401b031681565b348015610318575f5ffd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561034b575f5ffd5b506103d06040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152506040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b9004909116608082015290565b60405161024491905f60a0820190508251825262ffffff60208401511660208301526001600160401b036040840151166040830152606083015160070b60608301526001600160401b03608084015116608083015292915050565b348015610436575f5ffd5b5061029d610445366004613bd1565b603b6020525f90815260409020546001600160401b031681565b34801561046a575f5ffd5b50603e54610230906001600160a01b031681565b348015610489575f5ffd5b5061049d610498366004613c29565b61101e565b6040516102449190613c8f565b61020f6104b8366004613abc565b611080565b3480156104c8575f5ffd5b506102616104d7366004613bd1565b611388565b3480156104e7575f5ffd5b506104fb6104f6366004613c9d565b611496565b6040516102449190613cb4565b348015610513575f5ffd5b5061049d610522366004613c9d565b5f90815260366020526040902054600160c01b900460ff1690565b348015610548575f5ffd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561057b575f5ffd5b5061020f61058a366004613d14565b611541565b61020f61059d366004613d2f565b611636565b3480156105ad575f5ffd5b506104fb6105bc366004613c29565b6117b4565b3480156105cc575f5ffd5b506102616118a3565b3480156105e0575f5ffd5b5061020f6105ef366004613dc4565b6118bf565b3480156105ff575f5ffd5b5061020f61060e366004613dee565b6119f6565b34801561061e575f5ffd5b5061020f61062d366004613dee565b611b40565b34801561063d575f5ffd5b5061020f61064c366004613ed9565b611bd4565b34801561065c575f5ffd5b50603a5461029d906001600160401b031681565b34801561067b575f5ffd5b5061020f61068a366004613fab565b611d33565b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156106f5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107199190614012565b156107375760405163840a48d560e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600860048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa15801561079d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c19190614012565b156107df5760405163840a48d560e01b815260040160405180910390fd5b5f6108236107ed858061402d565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061212f92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561089157610891613c5b565b60028111156108a2576108a2613c5b565b81525050905080604001516001600160401b0316876001600160401b0316116108de576040516337e07ffd60e01b815260040160405180910390fd5b6001816060015160028111156108f6576108f6613c5b565b146109145760405163d49e19a760e01b815260040160405180910390fd5b610957610921868061402d565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061215192505050565b6109745760405163161ce5ed60e31b815260040160405180910390fd5b61098661098088611388565b87612179565b6109b26109928861221e565b873561099e888061402d565b6109ab60208b018b614072565b87516122f5565b6109bb5f612429565b50505050505050565b5f6109e071bbddc7ce488642fb579f8b00f3a5900072516125a9565b905090565b604051635ac86ab760e01b8152600a60048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610a4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6f9190614012565b15610a8d5760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b0316331480610ab05750603e546001600160a01b031633145b610acd5760405163427a777960e01b815260040160405180910390fd5b5f610ad66118a3565b90505f610ae384836140c8565b905080341015610b065760405163356680b760e01b815260040160405180910390fd5b5f610b1182346140df565b90505f5b85811015610d4d5736878783818110610b3057610b306140f2565b9050602002810190610b429190614106565b90505f610b8b610b528380614072565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061262f92505050565b905060015f82815260366020526040902054600160c01b900460ff166002811115610bb857610bb8613c5b565b14610bd65760405163d49e19a760e01b815260040160405180910390fd5b5f610be18380614072565b610bf16040860160208701613bd1565b604051602001610c0393929190614124565b60405160208183030381529060405290505f710961ef480eb55e80d19ad83579a64c0070026001600160a01b03168883604051610c40919061415c565b5f6040518083038185875af1925050503d805f8114610c7a576040519150601f19603f3d011682016040523d82523d5f602084013e610c7f565b606091505b5050905080610ca15760405163fc52d48360e01b815260040160405180910390fd5b610cb16040850160208601613bd1565b6001600160401b03165f03610cef5760405183907f60d8ca014d4765a2b8b389e25714cb1cef83b574222911a01d90c1bd69d2d320905f90a2610d3d565b827f8b2737bb64ab2f2dc09552dfa1c250399e6a42c7ea9f0e1c658f5d65d708ec05610d216040870160208801613bd1565b6040516001600160401b03909116815260200160405180910390a25b505060019092019150610b159050565b508015610d5e57610d5e33826126c0565b505050505050565b6033546001600160a01b0316331480610d895750603e546001600160a01b031633145b610da65760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600260048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015610e0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e309190614012565b15610e4e5760405163840a48d560e01b815260040160405180910390fd5b8584148015610e5c57508382145b610e79576040516343714afd60e01b815260040160405180910390fd5b603a546001600160401b03600160401b9091048116908a1611610eaf576040516337e07ffd60e01b815260040160405180910390fd5b603a546001600160401b03908116908a1611610ede576040516335e7f6b760e01b815260040160405180910390fd5b610ef0610eea8a611388565b89612179565b5f805b87811015610f8957610f758b8b358b8b85818110610f1357610f136140f2565b9050602002016020810190610f289190614167565b8a8a86818110610f3a57610f3a6140f2565b9050602002810190610f4c9190614072565b8a8a88818110610f5e57610f5e6140f2565b9050602002810190610f70919061402d565b6127d5565b610f7f908361418b565b9150600101610ef3565b5060335460405163a1ca780b60e01b81526001600160a01b0391821660048201525f6024820152604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015610ffc575f5ffd5b505af115801561100e573d5f5f3e3d5ffd5b5050505050505050505050505050565b5f5f61105e84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061262f92505050565b5f90815260366020526040902054600160c01b900460ff169150505b92915050565b604051635ac86ab760e01b8152600960048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156110e6573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061110a9190614012565b156111285760405163840a48d560e01b815260040160405180910390fd5b6033546001600160a01b031633148061114b5750603e546001600160a01b031633145b6111685760405163427a777960e01b815260040160405180910390fd5b5f6111716109c4565b90505f61117e84836140c8565b9050803410156111a15760405163356680b760e01b815260040160405180910390fd5b5f6111ac82346140df565b90505f5b85811015610d4d57368787838181106111cb576111cb6140f2565b90506020028101906111dd9190614106565b90505f6111ed610b528380614072565b90505f611200610b526020850185614072565b905060015f82815260366020526040902054600160c01b900460ff16600281111561122d5761122d613c5b565b1461124b5760405163d49e19a760e01b815260040160405180910390fd5b5f6112568480614072565b6112636020870187614072565b604051602001611276949392919061419e565b60405160208183030381529060405290505f71bbddc7ce488642fb579f8b00f3a5900072516001600160a01b031689836040516112b3919061415c565b5f6040518083038185875af1925050503d805f81146112ed576040519150601f19603f3d011682016040523d82523d5f602084013e6112f2565b606091505b50509050806113145760405163fc52d48360e01b815260040160405180910390fd5b82840361134a5760405184907fc97b965b92ae7fd20095fe8eb7b99f81f95f8c4adffb22a19116d8eb2846b016905f90a2611377565b604051839085907f42f9c9db2ca443e9ec62f4588bd0c9b241065c02c2a8001ac164ae1282dc7b94905f90a35b5050600190930192506111b0915050565b5f611396611fff600c6140c8565b6113a96001600160401b038416426140df565b106113c757604051637944e66d60e11b815260040160405180910390fd5b604080516001600160401b03841660208201525f918291720f3df6d732807ef1319fb7b8bb8522d0beac02910160408051601f198184030181529082905261140e9161415c565b5f60405180830381855afa9150503d805f8114611446576040519150601f19603f3d011682016040523d82523d5f602084013e61144b565b606091505b509150915081801561145d57505f8151115b61147a5760405163558ad0a360e01b815260040160405180910390fd5b8080602001905181019061148e91906141bd565b949350505050565b6114bd604080516080810182525f8082526020820181905291810182905290606082015290565b5f82815260366020908152604091829020825160808101845281546001600160401b038082168352600160401b8204811694830194909452600160801b810490931693810193909352906060830190600160c01b900460ff16600281111561152757611527613c5b565b600281111561153857611538613c5b565b90525092915050565b6033546001600160a01b03163314806115645750603e546001600160a01b031633145b6115815760405163427a777960e01b815260040160405180910390fd5b604051635ac86ab760e01b8152600660048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa1580156115e7573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061160b9190614012565b156116295760405163840a48d560e01b815260040160405180910390fd5b61163282612429565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461167f57604051633213a66160e21b815260040160405180910390fd5b346801bc16d674ec800000146116a85760405163049696b360e31b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec80000087876116eb612cd6565b8888886040518863ffffffff1660e01b815260040161170f9695949392919061422a565b5f604051808303818588803b158015611726575f5ffd5b505af1158015611738573d5f5f3e3d5ffd5b50505050507fa01003766d3cd97cf2ade5429690bf5d206be7fb01ef9d3a0089ecf67bc1121961179c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061262f92505050565b60405190815260200160405180910390a15050505050565b6117db604080516080810182525f8082526020820181905291810182905290606082015290565b60365f61181c85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061262f92505050565b815260208082019290925260409081015f20815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b81049094169281019290925290916060830190600160c01b900460ff16600281111561188857611888613c5b565b600281111561189957611899613c5b565b9052509392505050565b5f6109e0710961ef480eb55e80d19ad83579a64c0070026125a9565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461190857604051633213a66160e21b815260040160405180910390fd5b5f611917633b9aca008361428c565b9050611930633b9aca006001600160401b0383166140c8565b6034549092506001600160401b039081169082161115611963576040516302c6f54760e21b815260040160405180910390fd5b603480548291905f906119809084906001600160401b031661429f565b92506101000a8154816001600160401b0302191690836001600160401b03160217905550826001600160a01b03167f8947fd2ce07ef9cc302c4e8f0461015615d91ce851564839e91cc804c2f49d8e836040516119df91815260200190565b60405180910390a26119f183836126c0565b505050565b5f54610100900460ff1615808015611a1457505f54600160ff909116105b80611a2d5750303b158015611a2d57505f5460ff166001145b611a955760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611ab6575f805461ff0019166101001790555b6001600160a01b038216611add576040516339b190bb60e11b815260040160405180910390fd5b603380546001600160a01b0319166001600160a01b0384161790558015611632575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6033546001600160a01b03163314611b6b5760405163719f370360e11b815260040160405180910390fd5b603e54604080516001600160a01b03928316815291831660208301527ffb8129080a19d34dceac04ba253fc50304dc86c729bd63cdca4a969ad19a5eac910160405180910390a1603e80546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b03163314611bff5760405163719f370360e11b815260040160405180910390fd5b604051635ac86ab760e01b8152600560048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611c65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c899190614012565b15611ca75760405163840a48d560e01b815260040160405180910390fd5b8251845114611cc9576040516343714afd60e01b815260040160405180910390fd5b5f5b8451811015611d2c57611d2483858381518110611cea57611cea6140f2565b6020026020010151878481518110611d0457611d046140f2565b60200260200101516001600160a01b0316612d069092919063ffffffff16565b600101611ccb565b5050505050565b604051635ac86ab760e01b8152600760048201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690635ac86ab790602401602060405180830381865afa158015611d99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dbd9190614012565b15611ddb5760405163840a48d560e01b815260040160405180910390fd5b603a54600160401b90046001600160401b03165f819003611e0f57604051631a544f4960e01b815260040160405180910390fd5b6040805160a081018252603c548152603d5462ffffff811660208301526001600160401b0363010000008204811693830193909352600160581b810460070b6060830152600160981b90049091166080820152611e76611e6e8361221e565b825188612d58565b5f805b858110156120d65736878783818110611e9457611e946140f2565b9050602002810190611ea691906142be565b80355f908152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff166002811115611f1657611f16613c5b565b6002811115611f2757611f27613c5b565b9052509050600181606001516002811115611f4457611f44613c5b565b14611f505750506120ce565b856001600160401b031681604001516001600160401b031610611f745750506120ce565b5f8080611f84848a8f3588612e19565b60208b0180519396509194509250611f9b826142d2565b62ffffff16905250608088018051849190611fb79083906142ef565b6001600160401b0316905250606088018051839190611fd790839061430e565b60070b905250611fe781886142ef565b85355f908152603660209081526040918290208751815492890151938901516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b0319909516919092161792909217928316821781556060880151939a50879390929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b83600281111561208b5761208b613c5b565b021790555050604051863591506001600160401b038b16907fe4866335761a51dcaff766448ab0af6064291ee5dc94e68492bb9cd757c1e350905f90a350505050505b600101611e79565b506001600160401b038084165f908152603b6020526040812080548493919291612102918591166142ef565b92506101000a8154816001600160401b0302191690836001600160401b031602179055506109bb82612f2f565b5f815f81518110612142576121426140f2565b60200260200101519050919050565b5f81600381518110612165576121656140f2565b60200260200101515f5f1b14159050919050565b612185600360206140c8565b6121926020830183614072565b9050146121b2576040516313717da960e21b815260040160405180910390fd5b6122016121c26020830183614072565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508692505084359050600361314f565b611632576040516309bde33960e01b815260040160405180910390fd5b5f5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632704351a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561227c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122a0919061433d565b9050806001600160401b03165f036122cb576040516341a02cc960e01b815260040160405180910390fd5b806001600160401b0316836001600160401b031611156122ec5760016122ee565b5f5b9392505050565b600884146123165760405163200591bd60e01b815260040160405180910390fd5b5f61232088613184565b90508061232f6028600161418b565b612339919061418b565b6123449060206140c8565b8314612363576040516313717da960e21b815260040160405180910390fd5b5f61239f8787808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506131ac92505050565b90505f64ffffffffff84166123b66028600161418b565b600b901b17905061240086868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508d925086915085905061314f565b61241d576040516309bde33960e01b815260040160405180910390fd5b50505050505050505050565b603a54600160401b90046001600160401b0316156124595760405162be9bc360e81b815260040160405180910390fd5b603a546001600160401b03428116911603612487576040516367db5b8b60e01b815260040160405180910390fd5b6034545f906001600160401b03166124a3633b9aca004761428c565b6124ad919061429f565b90508180156124c357506001600160401b038116155b156124e1576040516332dea95960e21b815260040160405180910390fd5b5f6040518060a001604052806124f642611388565b815260395462ffffff1660208201526001600160401b0380851660408301525f60608301819052608090920191909152603a805442909216600160401b026fffffffffffffffff000000000000000019909216919091179055905061255a81612f2f565b805160208083015160405162ffffff90911681526001600160401b034216917f575796133bbed337e5b39aa49a30dc2556a91e0c6c2af4b7b886ae77ebef1076910160405180910390a3505050565b5f5f5f836001600160a01b03166040515f60405180830381855afa9150503d805f81146125f1576040519150601f19603f3d011682016040523d82523d5f602084013e6125f6565b606091505b5091509150818015612609575080516020145b6126265760405163c90158af60e01b815260040160405180910390fd5b61148e81614358565b5f815160301461265257604051634f88323960e11b815260040160405180910390fd5b6040516002906126689084905f9060200161437b565b60408051601f19818403018152908290526126829161415c565b602060405180830381855afa15801561269d573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061107a91906141bd565b804710156127105760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611a8c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114612759576040519150601f19603f3d011682016040523d82523d5f602084013e61275e565b606091505b50509050806119f15760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611a8c565b5f5f6128128484808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061212f92505050565b5f818152603660209081526040808320815160808101835281546001600160401b038082168352600160401b8204811695830195909552600160801b8104909416928101929092529394509192906060830190600160c01b900460ff16600281111561288057612880613c5b565b600281111561289157612891613c5b565b90525090505f816060015160028111156128ad576128ad613c5b565b146128cb576040516335e09e9d60e01b815260040160405180910390fd5b6001600160401b0380166129108686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061347a92505050565b6001600160401b03160361293757604051631958236d60e21b815260040160405180910390fd5b6001600160401b03801661297c8686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061349e92505050565b6001600160401b0316146129a357604051632eade63760e01b815260040160405180910390fd5b6129ab612cd6565b6129b490614358565b6129ef8686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134b592505050565b1480612a4457506129fe6134c9565b612a0790614358565b612a428686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134b592505050565b145b612a6157604051633772dd5360e11b815260040160405180910390fd5b5f612a9d8686808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152506134e592505050565b9050612ab6612aab8c61221e565b8b88888c8c8f6122f5565b60398054905f612ac58361439f565b9091555050603a545f90600160401b90046001600160401b031615612afc57603a54600160401b90046001600160401b0316612b09565b603a546001600160401b03165b6040805160808101825264ffffffffff8d1681526001600160401b03858116602083015283169181019190915290915060608101600190525f858152603660209081526040918290208351815492850151938501516001600160401b03908116600160801b0267ffffffffffffffff60801b19958216600160401b026001600160801b031990951691909216179290921792831682178155606084015190929091839160ff60c01b1990911668ffffffffffffffffff60801b1990911617600160c01b836002811115612bde57612bde613c5b565b021790555050603d8054849250601390612c09908490600160981b90046001600160401b03166142ef565b92506101000a8154816001600160401b0302191690836001600160401b031602179055507f101790c2993f6a4d962bd17c786126823ba1c4cf04ff4cccb2659d50fb20aee884604051612c5e91815260200190565b60405180910390a1604080518581526001600160401b03838116602083015284168183015290517fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f9181900360600190a1612cc6633b9aca006001600160401b0384166140c8565b9c9b505050505050505050505050565b604051606090612cf290600160f81b905f9030906020016143b7565b604051602081830303815290604052905090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526119f19084906134fc565b5f612d6284613184565b9050612d6f81600361418b565b612d7a9060206140c8565b612d876020840184614072565b905014612da7576040516313717da960e21b815260040160405180910390fd5b6003811b600c17612dfc612dbe6020850185614072565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525088925050863590508461314f565b611d2c576040516309bde33960e01b815260040160405180910390fd5b5f5f5f866020015192505f612e3286895f0151876135cf565b9050836001600160401b0316816001600160401b031614612ea657612e5784826143f5565b60408051873581526001600160401b038a8116602083015284168183015290519194507fcdae700d7241bc027168c53cf6f889763b0a2c88a65d77fc13a8a9fef0d8605f919081900360600190a15b6001600160401b0380821660208a0181905290881660408a01525f03612f245760398054905f612ed583614424565b909155505060026060890152612eea83614439565b6040519092508535906001600160401b038916907f5ce0aa04ae51d52da6e680fbe0336d2e2432f7c3dc2d4f3193204c57b9072107905f90a35b509450945094915050565b8051603c556020810151603d805460408401516060850151608086015162ffffff9095166affffffffffffffffffffff19909316831763010000006001600160401b0393841602176fffffffffffffffffffffffffffffffff60581b1916600160581b9183169190910267ffffffffffffffff60981b191617600160981b919094160292909217905515612fc05750565b60808101516034545f91612fdc916001600160401b03166142ef565b90505f82606001518360400151612ff3919061430e565b60408401516034805492935090915f906130179084906001600160401b03166142ef565b82546101009290920a6001600160401b03818102199093169183160217909155603a8054600160401b810483166001600160801b03199091161790555f915061306790633b9aca009085166140c8565b90505f61307c633b9aca00600785900b61445e565b603a546040518281529192506001600160401b0316907f525408c201bc1576eb44116f6478f1c2a54775b19a043bcfdc708364f74f8e449060200160405180910390a260335460405163a1ca780b60e01b81526001600160a01b03918216600482015260248101849052604481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a1ca780b906064015f604051808303815f87803b158015613132575f5ffd5b505af1158015613144573d5f5f3e3d5ffd5b505050505050505050565b5f8361316e576040516329e7276760e11b815260040160405180910390fd5b8361317a8685856136ad565b1495945050505050565b5f8082600181111561319857613198613c5b565b146131a457600661107a565b600592915050565b5f60018251116131cf5760405163f8ef036760e01b815260040160405180910390fd5b6131d982516137a0565b6131f65760405163f6558f5160e01b815260040160405180910390fd5b5f60028351613205919061428c565b90505f816001600160401b0381111561322057613220613e09565b604051908082528060200260200182016040528015613249578160200160208202803683370190505b5090505f5b828110156133435760028561326383836140c8565b81518110613273576132736140f2565b60200260200101518683600261328991906140c8565b61329490600161418b565b815181106132a4576132a46140f2565b60200260200101516040516020016132c6929190918252602082015260400190565b60408051601f19818403018152908290526132e09161415c565b602060405180830381855afa1580156132fb573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061331e91906141bd565b828281518110613330576133306140f2565b602090810291909101015260010161324e565b505b816001146134575761335860028361428c565b91505f5b828110156134515760028261337183836140c8565b81518110613381576133816140f2565b60200260200101518383600261339791906140c8565b6133a290600161418b565b815181106133b2576133b26140f2565b60200260200101516040516020016133d4929190918252602082015260400190565b60408051601f19818403018152908290526133ee9161415c565b602060405180830381855afa158015613409573d5f5f3e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061342c91906141bd565b82828151811061343e5761343e6140f2565b602090810291909101015260010161335c565b50613345565b805f81518110613469576134696140f2565b602002602001015192505050919050565b5f61107a82600581518110613491576134916140f2565b60200260200101516137bf565b5f61107a82600681518110613491576134916140f2565b5f81600181518110612142576121426140f2565b604051606090612cf290600160f91b905f9030906020016143b7565b5f61107a82600281518110613491576134916140f2565b5f613550826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138269092919063ffffffff16565b905080515f14806135705750808060200190518101906135709190614012565b6119f15760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611a8c565b5f6135dc6026600161418b565b6135e79060206140c8565b6135f46040840184614072565b905014613614576040516313717da960e21b815260040160405180910390fd5b5f61362060048561448d565b64ffffffffff1690506136796136396040850185614072565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250899250505060208601358461314f565b613696576040516309bde33960e01b815260040160405180910390fd5b6136a4836020013585613834565b95945050505050565b5f83515f141580156136ca5750602084516136c891906144b6565b155b6136e7576040516313717da960e21b815260040160405180910390fd5b604080516020808201909252848152905b855181116137775761370b6002856144b6565b5f0361373d5781515f528086015160205260208260405f60026107d05a03fa613732575f5ffd5b600284049350613765565b808601515f52815160205260208260405f60026107d05a03fa61375e575f5ffd5b6002840493505b61377060208261418b565b90506136f8565b508215613797576040516363df817160e01b815260040160405180910390fd5b51949350505050565b5f811580159061107a57506137b66001836140df565b82161592915050565b60f881901c60e882901c61ff00161760d882901c62ff0000161760c882901c63ff000000161764ff0000000060b883901c161765ff000000000060a883901c161766ff000000000000609883901c161767ff0000000000000060889290921c919091161790565b606061148e84845f85613860565b5f806138416004846144c9565b61384c9060406144f2565b64ffffffffff16905061148e84821b6137bf565b6060824710156138c15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611a8c565b5f5f866001600160a01b031685876040516138dc919061415c565b5f6040518083038185875af1925050503d805f8114613916576040519150601f19603f3d011682016040523d82523d5f602084013e61391b565b606091505b509150915061392c87838387613937565b979650505050505050565b606083156139a55782515f0361399e576001600160a01b0385163b61399e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611a8c565b508161148e565b61148e83838151156139ba5781518083602001fd5b8060405162461bcd60e51b8152600401611a8c9190614512565b6001600160401b03811681146139e8575f5ffd5b50565b5f604082840312156139fb575f5ffd5b50919050565b5f5f5f60608486031215613a13575f5ffd5b8335613a1e816139d4565b925060208401356001600160401b03811115613a38575f5ffd5b613a44868287016139eb565b92505060408401356001600160401b03811115613a5f575f5ffd5b613a6b868287016139eb565b9150509250925092565b5f5f83601f840112613a85575f5ffd5b5081356001600160401b03811115613a9b575f5ffd5b6020830191508360208260051b8501011115613ab5575f5ffd5b9250929050565b5f5f60208385031215613acd575f5ffd5b82356001600160401b03811115613ae2575f5ffd5b613aee85828601613a75565b90969095509350505050565b5f5f5f5f5f5f5f5f60a0898b031215613b11575f5ffd5b8835613b1c816139d4565b975060208901356001600160401b03811115613b36575f5ffd5b613b428b828c016139eb565b97505060408901356001600160401b03811115613b5d575f5ffd5b613b698b828c01613a75565b90975095505060608901356001600160401b03811115613b87575f5ffd5b613b938b828c01613a75565b90955093505060808901356001600160401b03811115613bb1575f5ffd5b613bbd8b828c01613a75565b999c989b5096995094979396929594505050565b5f60208284031215613be1575f5ffd5b81356122ee816139d4565b5f5f83601f840112613bfc575f5ffd5b5081356001600160401b03811115613c12575f5ffd5b602083019150836020828501011115613ab5575f5ffd5b5f5f60208385031215613c3a575f5ffd5b82356001600160401b03811115613c4f575f5ffd5b613aee85828601613bec565b634e487b7160e01b5f52602160045260245ffd5b60038110613c8b57634e487b7160e01b5f52602160045260245ffd5b9052565b6020810161107a8284613c6f565b5f60208284031215613cad575f5ffd5b5035919050565b5f6080820190506001600160401b0383511682526001600160401b0360208401511660208301526001600160401b0360408401511660408301526060830151613d006060840182613c6f565b5092915050565b80151581146139e8575f5ffd5b5f60208284031215613d24575f5ffd5b81356122ee81613d07565b5f5f5f5f5f60608688031215613d43575f5ffd5b85356001600160401b03811115613d58575f5ffd5b613d6488828901613bec565b90965094505060208601356001600160401b03811115613d82575f5ffd5b613d8e88828901613bec565b96999598509660400135949350505050565b6001600160a01b03811681146139e8575f5ffd5b8035613dbf81613da0565b919050565b5f5f60408385031215613dd5575f5ffd5b8235613de081613da0565b946020939093013593505050565b5f60208284031215613dfe575f5ffd5b81356122ee81613da0565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613e4557613e45613e09565b604052919050565b5f6001600160401b03821115613e6557613e65613e09565b5060051b60200190565b5f82601f830112613e7e575f5ffd5b8135613e91613e8c82613e4d565b613e1d565b8082825260208201915060208360051b860101925085831115613eb2575f5ffd5b602085015b83811015613ecf578035835260209283019201613eb7565b5095945050505050565b5f5f5f60608486031215613eeb575f5ffd5b83356001600160401b03811115613f00575f5ffd5b8401601f81018613613f10575f5ffd5b8035613f1e613e8c82613e4d565b8082825260208201915060208360051b850101925088831115613f3f575f5ffd5b6020840193505b82841015613f6a578335613f5981613da0565b825260209384019390910190613f46565b955050505060208401356001600160401b03811115613f87575f5ffd5b613f9386828701613e6f565b925050613fa260408501613db4565b90509250925092565b5f5f5f60408486031215613fbd575f5ffd5b83356001600160401b03811115613fd2575f5ffd5b613fde868287016139eb565b93505060208401356001600160401b03811115613ff9575f5ffd5b61400586828701613a75565b9497909650939450505050565b5f60208284031215614022575f5ffd5b81516122ee81613d07565b5f5f8335601e19843603018112614042575f5ffd5b8301803591506001600160401b0382111561405b575f5ffd5b6020019150600581901b3603821315613ab5575f5ffd5b5f5f8335601e19843603018112614087575f5ffd5b8301803591506001600160401b038211156140a0575f5ffd5b602001915036819003821315613ab5575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761107a5761107a6140b4565b8181038181111561107a5761107a6140b4565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e1983360301811261411a575f5ffd5b9190910192915050565b8284823760c09190911b6001600160c01b0319169101908152600801919050565b5f81518060208401855e5f93019283525090919050565b5f6122ee8284614145565b5f60208284031215614177575f5ffd5b813564ffffffffff811681146122ee575f5ffd5b8082018082111561107a5761107a6140b4565b838582375f8482015f8152838582375f93019283525090949350505050565b5f602082840312156141cd575f5ffd5b5051919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b608081525f61423d60808301888a6141d4565b828103602084015261424f81886141fc565b905082810360408401526142648186886141d4565b915050826060830152979650505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261429a5761429a614278565b500490565b6001600160401b03828116828216039081111561107a5761107a6140b4565b5f8235605e1983360301811261411a575f5ffd5b5f62ffffff8216806142e6576142e66140b4565b5f190192915050565b6001600160401b03818116838216019081111561107a5761107a6140b4565b600781810b9083900b01677fffffffffffffff8113677fffffffffffffff198212171561107a5761107a6140b4565b5f6020828403121561434d575f5ffd5b81516122ee816139d4565b805160208083015191908110156139fb575f1960209190910360031b1b16919050565b5f6143868285614145565b6001600160801b03199390931683525050601001919050565b5f600182016143b0576143b06140b4565b5060010190565b6001600160f81b03199390931683526001600160a81b031991909116600183015260601b6bffffffffffffffffffffffff1916600c82015260200190565b600782810b9082900b03677fffffffffffffff198112677fffffffffffffff8213171561107a5761107a6140b4565b5f81614432576144326140b4565b505f190190565b5f8160070b677fffffffffffffff198103614456576144566140b4565b5f0392915050565b8082025f8212600160ff1b84141615614479576144796140b4565b818105831482151761107a5761107a6140b4565b5f64ffffffffff8316806144a3576144a3614278565b8064ffffffffff84160491505092915050565b5f826144c4576144c4614278565b500690565b5f64ffffffffff8316806144df576144df614278565b8064ffffffffff84160691505092915050565b64ffffffffff8181168382160290811690818114613d0057613d006140b4565b602081525f6122ee60208301846141fc56fea2646970667358221220150997dc569abe69c84016680c4f6a38f3415e4ee7f3d3d9fc5a6b2be1e80f2f64736f6c634300081e0033", } // EigenPodABI is the input ABI used to generate the binding from. @@ -98,7 +98,7 @@ var EigenPodABI = EigenPodMetaData.ABI var EigenPodBin = EigenPodMetaData.Bin // DeployEigenPod deploys a new Ethereum contract, binding an instance of EigenPod to it. -func DeployEigenPod(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _eigenPodManager common.Address, _version string) (common.Address, *types.Transaction, *EigenPod, error) { +func DeployEigenPod(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _eigenPodManager common.Address) (common.Address, *types.Transaction, *EigenPod, error) { parsed, err := EigenPodMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -107,7 +107,7 @@ func DeployEigenPod(auth *bind.TransactOpts, backend bind.ContractBackend, _ethP return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenPodBin), backend, _ethPOS, _eigenPodManager, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenPodBin), backend, _ethPOS, _eigenPodManager) if err != nil { return common.Address{}, nil, nil, err } @@ -752,37 +752,6 @@ func (_EigenPod *EigenPodCallerSession) ValidatorStatus0(pubkeyHash [32]byte) (u return _EigenPod.Contract.ValidatorStatus0(&_EigenPod.CallOpts, pubkeyHash) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPod *EigenPodCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _EigenPod.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPod *EigenPodSession) Version() (string, error) { - return _EigenPod.Contract.Version(&_EigenPod.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPod *EigenPodCallerSession) Version() (string, error) { - return _EigenPod.Contract.Version(&_EigenPod.CallOpts) -} - // WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. // // Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) diff --git a/pkg/bindings/EigenPodManager/binding.go b/pkg/bindings/EigenPodManager/binding.go index 4b4dc78cc2..360bfb0ffa 100644 --- a/pkg/bindings/EigenPodManager/binding.go +++ b/pkg/bindings/EigenPodManager/binding.go @@ -37,8 +37,8 @@ type OperatorSet struct { // EigenPodManagerMetaData contains all meta data concerning the EigenPodManager contract. var EigenPodManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofTimestampSetter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610120604052348015610010575f5ffd5b50604051612f01380380612f0183398101604081905261002f916101c2565b80858585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805292831660a05290821660c0521660e05261008281610099565b610100525061008f6100df565b505050505061031a565b5f5f829050601f815111156100cc578260405163305a27a960e01b81526004016100c391906102bf565b60405180910390fd5b80516100d7826102f4565b179392505050565b5f54610100900460ff16156101465760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100c3565b5f5460ff90811614610195575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101ab575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f60a086880312156101d6575f5ffd5b85516101e181610197565b60208701519095506101f281610197565b604087015190945061020381610197565b606087015190935061021481610197565b60808701519092506001600160401b0381111561022f575f5ffd5b8601601f8101881361023f575f5ffd5b80516001600160401b03811115610258576102586101ae565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610286576102866101ae565b6040528181528282016020018a101561029d575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295909350565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610314575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051612b6461039d5f395f610b2401525f818161060c0152818161077b015281816109d401528181610a7a01528181610c0501528181610f82015261103701525f818161028b015281816110cd015261186701525f61044b01525f8181610492015281816114950152611a840152612b645ff3fe6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f000000000000000000000000000000000000000000000000000000000000000081565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f0000000000000000000000000000000000000000000000000000000000000000611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200fdd61faaceeb328ec0077dd560195e8ab3b7f96c33b1a12a23d282e72308e9264736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_ethPOS\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"},{\"name\":\"_eigenPodBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"},{\"name\":\"_delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofTimestampSetter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + Bin: "0x610100604052348015610010575f5ffd5b50604051612ca0380380612ca083398101604081905261002f9161015c565b838383836001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805292831660a05290821660c0521660e052610080610089565b505050506101b8565b5f54610100900460ff16156100f45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610143575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610159575f5ffd5b50565b5f5f5f5f6080858703121561016f575f5ffd5b845161017a81610145565b602086015190945061018b81610145565b604086015190935061019c81610145565b60608601519092506101ad81610145565b939692955090935050565b60805160a05160c05160e051612a6f6102315f395f81816105e00152818161074f015281816109a801528181610a4e01528181610ba901528181610f260152610fdb01525f81816102800152818161107101526117ce01525f61041f01525f81816104660152818161143901526119eb0152612a6f5ff3fe6080604052600436106101e6575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b14610602578063f5d4fed314610621578063f6848d2414610636578063fabc1cbc1461066f578063fe243a171461068e575f5ffd5b8063a6a509be14610570578063cd6dc68714610585578063d48e8894146105a4578063ea4d3c9b146105cf575f5ffd5b80639ba06275116100d85780639ba06275146104df578063a1ca780b14610513578063a38406a314610532578063a3d75e0914610551575f5ffd5b8063886f1195146104555780638da5cb5b146104885780639104c319146104a55780639b4e4634146104cc575f5ffd5b8063595edbcb1161017e578063715018a61161014e578063715018a6146103db578063724af423146103ef57806374cdd7981461040e57806384d8106214610441575f5ffd5b8063595edbcb146103405780635a26fbf41461035f5780635ac86ab71461037e5780635c975abb146103bd575f5ffd5b80632eae418c116101b95780632eae418c146102ba5780633fb99ca5146102d957806350ff7225146102f8578063595c6a671461032c575f5ffd5b80630d1e9de1146101ea578063136439dd1461020b5780632704351a1461022a578063292b7b2b1461026f575b5f5ffd5b3480156101f5575f5ffd5b50610209610204366004611cbe565b6106ad565b005b348015610216575f5ffd5b50610209610225366004611cd9565b61070a565b348015610235575f5ffd5b50609f5461025190600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b34801561027a575f5ffd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610266565b3480156102c5575f5ffd5b506102096102d4366004611cf0565b610744565b3480156102e4575f5ffd5b506102096102f3366004611d3e565b61099d565b348015610303575f5ffd5b50610317610312366004611d88565b610a41565b60408051928352602083019190915201610266565b348015610337575f5ffd5b50610209610af1565b34801561034b575f5ffd5b50609f546102a2906001600160a01b031681565b34801561036a575f5ffd5b50610209610379366004611dc6565b610b05565b348015610389575f5ffd5b506103ad610398366004611ded565b606654600160ff9092169190911b9081161490565b6040519015158152602001610266565b3480156103c8575f5ffd5b506066545b604051908152602001610266565b3480156103e6575f5ffd5b50610209610b8c565b3480156103fa575f5ffd5b506103cd610409366004611d88565b610b9d565b348015610419575f5ffd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561044c575f5ffd5b506102a2610ce2565b348015610460575f5ffd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b348015610493575f5ffd5b506033546001600160a01b03166102a2565b3480156104b0575f5ffd5b506102a273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b6102096104da366004611e4b565b610d45565b3480156104ea575f5ffd5b506102a26104f9366004611cbe565b60986020525f90815260409020546001600160a01b031681565b34801561051e575f5ffd5b5061020961052d366004611ebe565b610df6565b34801561053d575f5ffd5b506102a261054c366004611cbe565b611017565b34801561055c575f5ffd5b5061025161056b366004611cbe565b6110e8565b34801561057b575f5ffd5b506103cd60995481565b348015610590575f5ffd5b5061020961059f366004611ef0565b611148565b3480156105af575f5ffd5b506103cd6105be366004611cbe565b609b6020525f908152604090205481565b3480156105da575f5ffd5b506102a27f000000000000000000000000000000000000000000000000000000000000000081565b34801561060d575f5ffd5b5061020961061c366004611cbe565b611264565b34801561062c575f5ffd5b506103cd609e5481565b348015610641575f5ffd5b506103ad610650366004611cbe565b6001600160a01b039081165f9081526098602052604090205416151590565b34801561067a575f5ffd5b50610209610689366004611cd9565b6112dd565b348015610699575f5ffd5b506103cd6106a8366004611f1a565b61134a565b6106b56113ca565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b610712611424565b60665481811681146107375760405163c61dca5d60e01b815260040160405180910390fd5b610740826114c7565b5050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461078d5760405163f739589b60e01b815260040160405180910390fd5b610795611504565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107d257604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0384166107f9576040516339b190bb60e11b815260040160405180910390fd5b5f81136108195760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b6020526040812054908290821215610913575f61084583611f65565b90505f8185111561086357508061085c8186611f7f565b9250610869565b505f9150835b5f6108748286611f92565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108c49085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161090791815260200190565b60405180910390a25050505b801561098b576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b158015610974575f5ffd5b505af1158015610986573d5f5f3e3d5ffd5b505050505b5050610997600160c955565b50505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109e65760405163f739589b60e01b815260040160405180910390fd5b6109ee611504565b80609e5f8282546109ff9190611fb9565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a1610997600160c955565b5f80336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a8c5760405163f739589b60e01b815260040160405180910390fd5b610a94611504565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610ad157604051632711b74d60e11b815260040160405180910390fd5b610adb858461155d565b91509150610ae9600160c955565b935093915050565b610af9611424565b610b035f196114c7565b565b609f546001600160a01b03163314610b3057604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd33906020016106ff565b610b946113ca565b610b035f6116a4565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610be75760405163f739589b60e01b815260040160405180910390fd5b610bef611504565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c2c57604051632711b74d60e11b815260040160405180910390fd5b5f610c36836116f5565b6001600160a01b0386165f908152609b6020526040902054610c589190611fcc565b90505f811215610c7b5760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610cc79084815260200190565b60405180910390a29050610cdb600160c955565b9392505050565b5f5f610ced8161175e565b610cf5611504565b335f908152609860205260409020546001600160a01b031615610d2b5760405163031a852160e21b815260040160405180910390fd5b5f610d34611789565b925050610d41600160c955565b5090565b5f610d4f8161175e565b610d57611504565b335f908152609860205260409020546001600160a01b031680610d7f57610d7c611789565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610db5908b908b908b908b908b9060040161201a565b5f604051808303818588803b158015610dcc575f5ffd5b505af1158015610dde573d5f5f3e3d5ffd5b505050505050610dee600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e31576040516312e16d7160e11b815260040160405180910390fd5b610e39611504565b6001600160a01b038416610e60576040516339b190bb60e11b815260040160405180910390fd5b610e6e633b9aca0083612067565b15610e8c576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610ec557604051634b692bcf60e01b815260040160405180910390fd5b5f831315610f86575f5f610ed9878661155d565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b158015610f69575f5ffd5b505af1158015610f7b573d5f5f3e3d5ffd5b50505050505061100c565b5f83121561100c575f610fa28686610f9d87611f65565b6118e4565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906360a0d1ce9060640161095d565b50610997600160c955565b6001600160a01b038082165f90815260986020526040812054909116806110e2576110df836001600160a01b03165f1b60405180610940016040528061090e815260200161212c61090e9139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f19818403018152908290526110c4929160200161209d565b604051602081830303815290604052805190602001206119dd565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061113e57670de0b6b3a7640000610cdb565b6020015192915050565b5f54610100900460ff161580801561116657505f54600160ff909116105b8061117f5750303b15801561117f57505f5460ff166001145b6111e75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611208575f805461ff0019166101001790555b611211836116a4565b61121a826114c7565b801561125f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b61126c6113ca565b6001600160a01b0381166112d15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111de565b6112da816116a4565b50565b6112e56119e9565b6066548019821981161461130c5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac01461138857604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b6020526040812054126113c2576001600160a01b0383165f908152609b60205260409020546110df565b505f92915050565b6033546001600160a01b03163314610b035760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111de565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611486573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa91906120b9565b610b0357604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115565760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016111de565b600260c955565b5f806001600160a01b038416611586576040516339b190bb60e11b815260040160405180910390fd5b5f8312156115a75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916115cb8383611f92565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c61939061161b9086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161165e91815260200190565b60405180910390a25f811361167b575f5f9450945050505061169d565b5f821215611690575f9450925061169d915050565b50925083915061169d9050565b9250929050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d415760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016111de565b606654600160ff83161b908116036112da5760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611798906120d8565b9091555060408051610940810190915261090e8082525f91611835918391339161212c6020830139604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166020820152808201919091525f606082015260800160408051601f1981840301815290829052611821929160200161209d565b604051602081830303815290604052611a9a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b158015611876575f5ffd5b505af1158015611888573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806118f08385611f7f565b90505f6118fc866110e8565b90505f61191467ffffffffffffffff83168488611b9c565b90505f61192182846120f0565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f6110df838330611c81565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a45573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a699190612110565b6001600160a01b0316336001600160a01b031614610b035760405163794821ff60e01b815260040160405180910390fd5b5f83471015611aeb5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016111de565b81515f03611b3b5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016111de565b8282516020840186f590506001600160a01b038116610cdb5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016111de565b5f80805f19858709858702925082811083820303915050805f03611bd357838281611bc957611bc9612053565b0492505050610cdb565b808411611c1a5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016111de565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b03811681146112da575f5ffd5b5f60208284031215611cce575f5ffd5b8135610cdb81611caa565b5f60208284031215611ce9575f5ffd5b5035919050565b5f5f5f5f60808587031215611d03575f5ffd5b8435611d0e81611caa565b93506020850135611d1e81611caa565b92506040850135611d2e81611caa565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611d52575f5ffd5b6040811215611d5f575f5ffd5b50849350604084013592506060840135611d7881611caa565b9396929550929360800135925050565b5f5f5f60608486031215611d9a575f5ffd5b8335611da581611caa565b92506020840135611db581611caa565b929592945050506040919091013590565b5f60208284031215611dd6575f5ffd5b813567ffffffffffffffff81168114610cdb575f5ffd5b5f60208284031215611dfd575f5ffd5b813560ff81168114610cdb575f5ffd5b5f5f83601f840112611e1d575f5ffd5b50813567ffffffffffffffff811115611e34575f5ffd5b60208301915083602082850101111561169d575f5ffd5b5f5f5f5f5f60608688031215611e5f575f5ffd5b853567ffffffffffffffff811115611e75575f5ffd5b611e8188828901611e0d565b909650945050602086013567ffffffffffffffff811115611ea0575f5ffd5b611eac88828901611e0d565b96999598509660400135949350505050565b5f5f5f60608486031215611ed0575f5ffd5b8335611edb81611caa565b95602085013595506040909401359392505050565b5f5f60408385031215611f01575f5ffd5b8235611f0c81611caa565b946020939093013593505050565b5f5f60408385031215611f2b575f5ffd5b8235611f3681611caa565b91506020830135611f4681611caa565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b8201611f7957611f79611f51565b505f0390565b818103818111156110e2576110e2611f51565b8082018281125f831280158216821582161715611fb157611fb1611f51565b505092915050565b808201808211156110e2576110e2611f51565b8181035f831280158383131683831282161715611feb57611feb611f51565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f61202d606083018789611ff2565b8281036020840152612040818688611ff2565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261208157634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6120b16120ab8386612086565b84612086565b949350505050565b5f602082840312156120c9575f5ffd5b81518015158114610cdb575f5ffd5b5f600182016120e9576120e9611f51565b5060010190565b67ffffffffffffffff82811682821603908111156110e2576110e2611f51565b5f60208284031215612120575f5ffd5b8151610cdb81611caa56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122000d60ff6e6426be33e4cafc68b25827809667f55791b67de15e8ad4e105918cb64736f6c634300081e0033", } // EigenPodManagerABI is the input ABI used to generate the binding from. @@ -50,7 +50,7 @@ var EigenPodManagerABI = EigenPodManagerMetaData.ABI var EigenPodManagerBin = EigenPodManagerMetaData.Bin // DeployEigenPodManager deploys a new Ethereum contract, binding an instance of EigenPodManager to it. -func DeployEigenPodManager(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _eigenPodBeacon common.Address, _delegationManager common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *EigenPodManager, error) { +func DeployEigenPodManager(auth *bind.TransactOpts, backend bind.ContractBackend, _ethPOS common.Address, _eigenPodBeacon common.Address, _delegationManager common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *EigenPodManager, error) { parsed, err := EigenPodManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -59,7 +59,7 @@ func DeployEigenPodManager(auth *bind.TransactOpts, backend bind.ContractBackend return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenPodManagerBin), backend, _ethPOS, _eigenPodBeacon, _delegationManager, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenPodManagerBin), backend, _ethPOS, _eigenPodBeacon, _delegationManager, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -766,37 +766,6 @@ func (_EigenPodManager *EigenPodManagerCallerSession) StakerDepositShares(user c return _EigenPodManager.Contract.StakerDepositShares(&_EigenPodManager.CallOpts, user, strategy) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManager *EigenPodManagerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _EigenPodManager.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManager *EigenPodManagerSession) Version() (string, error) { - return _EigenPodManager.Contract.Version(&_EigenPodManager.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManager *EigenPodManagerCallerSession) Version() (string, error) { - return _EigenPodManager.Contract.Version(&_EigenPodManager.CallOpts) -} - // AddShares is a paid mutator transaction binding the contract method 0x50ff7225. // // Solidity: function addShares(address staker, address strategy, uint256 shares) returns(uint256, uint256) diff --git a/pkg/bindings/EigenPodManagerStorage/binding.go b/pkg/bindings/EigenPodManagerStorage/binding.go index ab52ed7d66..ff18f153ee 100644 --- a/pkg/bindings/EigenPodManagerStorage/binding.go +++ b/pkg/bindings/EigenPodManagerStorage/binding.go @@ -37,7 +37,7 @@ type OperatorSet struct { // EigenPodManagerStorageMetaData contains all meta data concerning the EigenPodManagerStorage contract. var EigenPodManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofTimestampSetter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofTimestampSetter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", } // EigenPodManagerStorageABI is the input ABI used to generate the binding from. @@ -713,37 +713,6 @@ func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) StakerDeposi return _EigenPodManagerStorage.Contract.StakerDepositShares(&_EigenPodManagerStorage.CallOpts, user, strategy) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManagerStorage *EigenPodManagerStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _EigenPodManagerStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManagerStorage *EigenPodManagerStorageSession) Version() (string, error) { - return _EigenPodManagerStorage.Contract.Version(&_EigenPodManagerStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodManagerStorage *EigenPodManagerStorageCallerSession) Version() (string, error) { - return _EigenPodManagerStorage.Contract.Version(&_EigenPodManagerStorage.CallOpts) -} - // AddShares is a paid mutator transaction binding the contract method 0x50ff7225. // // Solidity: function addShares(address staker, address strategy, uint256 shares) returns(uint256, uint256) diff --git a/pkg/bindings/EigenPodStorage/binding.go b/pkg/bindings/EigenPodStorage/binding.go index 3378f548d5..f9089712ef 100644 --- a/pkg/bindings/EigenPodStorage/binding.go +++ b/pkg/bindings/EigenPodStorage/binding.go @@ -85,7 +85,7 @@ type IEigenPodTypesWithdrawalRequest struct { // EigenPodStorageMetaData contains all meta data concerning the EigenPodStorage contract. var EigenPodStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", } // EigenPodStorageABI is the input ABI used to generate the binding from. @@ -699,37 +699,6 @@ func (_EigenPodStorage *EigenPodStorageCallerSession) ValidatorStatus0(pubkeyHas return _EigenPodStorage.Contract.ValidatorStatus0(&_EigenPodStorage.CallOpts, pubkeyHash) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodStorage *EigenPodStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _EigenPodStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodStorage *EigenPodStorageSession) Version() (string, error) { - return _EigenPodStorage.Contract.Version(&_EigenPodStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenPodStorage *EigenPodStorageCallerSession) Version() (string, error) { - return _EigenPodStorage.Contract.Version(&_EigenPodStorage.CallOpts) -} - // WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. // // Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) diff --git a/pkg/bindings/EigenStrategy/binding.go b/pkg/bindings/EigenStrategy/binding.go index 652fc4ae30..823bc92483 100644 --- a/pkg/bindings/EigenStrategy/binding.go +++ b/pkg/bindings/EigenStrategy/binding.go @@ -31,8 +31,8 @@ var ( // EigenStrategyMetaData contains all meta data concerning the EigenStrategy contract. var EigenStrategyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"EIGEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigen\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161181238038061181283398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114d861033a5f395f8181610196015281816103990152818161076101526107e301525f6105a401525f8181610274015281816109910152610eca01526114d85ff3fe608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000000000000000000000000000000000000000000081565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f0000000000000000000000000000000000000000000000000000000000000000610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220c126ee3ed65facb14cfa4c4b374d2894a7baff78f9620a242b72eb3bfcaf3f8564736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"EIGEN\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigen\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_EIGEN\",\"type\":\"address\",\"internalType\":\"contractIEigen\"},{\"name\":\"_bEIGEN\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161160138038061160183398101604081905261002e9161014f565b8181806001600160a01b038116610058576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03908116608052821660a05261007361007c565b50505050610187565b5f54610100900460ff16156100e75760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610136575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461014c575f5ffd5b50565b5f5f60408385031215610160575f5ffd5b825161016b81610138565b602084015190925061017c81610138565b809150509250929050565b60805160a0516114366101cb5f395f818161018b015281816103860152818161071e01526107a001525f81816102540152818161094e0152610e4f01526114365ff3fe608060405234801561000f575f5ffd5b506004361061013d575f3560e01c8063886f1195116100b4578063ce7c2ac211610079578063ce7c2ac2146102c4578063d9caed12146102d7578063e3dae51c146102ea578063f3e73875146102fd578063fabc1cbc14610310578063fdc371ce14610323575f5ffd5b8063886f11951461024f5780638c871019146102765780638f6a624014610289578063ab5921e11461029c578063c4d66de8146102b1575f5ffd5b8063485cc95511610105578063485cc955146101d7578063553ca5f8146101ea578063595c6a67146101fd5780635ac86ab7146102055780635c975abb146102345780637a8b26371461023c575f5ffd5b8063136439dd146101415780632495a5991461015657806339b70e38146101865780633a98ef39146101ad57806347e7ef24146101c4575b5f5ffd5b61015461014f366004611129565b610336565b005b603254610169906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101b660335481565b60405190815260200161017d565b6101b66101d2366004611154565b610370565b6101546101e536600461117e565b61049f565b6101b66101f83660046111b5565b61058a565b61015461059d565b6102246102133660046111e5565b6001805460ff9092161b9081161490565b604051901515815260200161017d565b6001546101b6565b6101b661024a366004611129565b6105b1565b6101697f000000000000000000000000000000000000000000000000000000000000000081565b6101b6610284366004611129565b6105fa565b6101b66102973660046111b5565b610604565b6102a4610611565b60405161017d9190611200565b6101546102bf3660046111b5565b610631565b6101b66102d23660046111b5565b6106f7565b6101b66102e5366004611235565b610789565b6101b66102f8366004611129565b61088b565b6101b661030b366004611129565b6108c2565b61015461031e366004611129565b6108cc565b606454610169906001600160a01b031681565b61033e610939565b60015481811681146103635760405163c61dca5d60e01b815260040160405180910390fd5b61036c826109dc565b5050565b5f5f61037b81610a19565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103c4576040516348da714f60e01b815260040160405180910390fd5b6103ce8484610a4f565b6033545f6103de6103e883611287565b90505f6103e86103ec610b08565b6103f69190611287565b90505f610403878361129a565b90508061041084896112ad565b61041a91906112c4565b9550855f0361043c57604051630c392ed360e11b815260040160405180910390fd5b6104468685611287565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561047b57604051632f14e8a360e11b815260040160405180910390fd5b610494826103e860335461048f9190611287565b610b77565b505050505092915050565b5f54610100900460ff16158080156104bd57505f54600160ff909116105b806104d65750303b1580156104d657505f5460ff166001145b6104fb5760405162461bcd60e51b81526004016104f2906112e3565b60405180910390fd5b5f805460ff19166001179055801561051c575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561054082610bc3565b8015610585575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b5f61059761024a836106f7565b92915050565b6105a5610939565b6105af5f196109dc565b565b5f5f6103e86033546105c39190611287565b90505f6103e86105d1610b08565b6105db9190611287565b9050816105e885836112ad565b6105f291906112c4565b949350505050565b5f6105978261088b565b5f61059761030b836106f7565b60606040518060800160405280604d81526020016113b4604d9139905090565b5f54610100900460ff161580801561064f57505f54600160ff909116105b806106685750303b15801561066857505f5460ff166001145b6106845760405162461bcd60e51b81526004016104f2906112e3565b5f805460ff1916600117905580156106a5575f805461ff0019166101001790555b6106ae82610bc3565b801561036c575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa158015610765573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105979190611331565b5f600161079581610a19565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107de576040516348da714f60e01b815260040160405180910390fd5b6107e9858585610d0e565b6033548084111561080d57604051630b469df360e41b815260040160405180910390fd5b5f61081a6103e883611287565b90505f6103e8610828610b08565b6108329190611287565b90508161083f87836112ad565b61084991906112c4565b9450610855868461129a565b603355610875610865868361129a565b6103e860335461048f9190611287565b610880888887610d54565b505050509392505050565b5f5f6103e860335461089d9190611287565b90505f6103e86108ab610b08565b6108b59190611287565b9050806105e883866112ad565b5f610597826105b1565b6108d4610e4d565b600154801982198116146108fb5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561099b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190611348565b6105af57604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a2e816001805460ff9092161b9081161490565b15610a4c5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610a7857506064546001600160a01b038381169116145b610a9557604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361036c57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610aee575f5ffd5b505af1158015610b00573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b4e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b729190611331565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610bab84670de0b6b3a76400006112ad565b610bb591906112c4565b6040519081526020016106eb565b5f54610100900460ff16610c2d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016104f2565b603280546001600160a01b0319166001600160a01b038316179055610c515f6109dc565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce79190611367565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b0383811691161480610d3757506064546001600160a01b038381169116145b61058557604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610e395760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610dba573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dde9190611348565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e22575f5ffd5b505af1158015610e34573d5f5f3e3d5ffd5b505050505b6105856001600160a01b0383168483610efe565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ea9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ecd9190611382565b6001600160a01b0316336001600160a01b0316146105af5760405163794821ff60e01b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610585928692915f91610f8d91851690849061100c565b905080515f1480610fad575080806020019051810190610fad9190611348565b6105855760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016104f2565b60606105f284845f85855f5f866001600160a01b03168587604051611031919061139d565b5f6040518083038185875af1925050503d805f811461106b576040519150601f19603f3d011682016040523d82523d5f602084013e611070565b606091505b50915091506110818783838761108c565b979650505050505050565b606083156110fa5782515f036110f3576001600160a01b0385163b6110f35760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016104f2565b50816105f2565b6105f2838381511561110f5781518083602001fd5b8060405162461bcd60e51b81526004016104f29190611200565b5f60208284031215611139575f5ffd5b5035919050565b6001600160a01b0381168114610a4c575f5ffd5b5f5f60408385031215611165575f5ffd5b823561117081611140565b946020939093013593505050565b5f5f6040838503121561118f575f5ffd5b823561119a81611140565b915060208301356111aa81611140565b809150509250929050565b5f602082840312156111c5575f5ffd5b81356111d081611140565b9392505050565b60ff81168114610a4c575f5ffd5b5f602082840312156111f5575f5ffd5b81356111d0816111d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f60608486031215611247575f5ffd5b833561125281611140565b9250602084013561126281611140565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561059757610597611273565b8181038181111561059757610597611273565b808202811582820484141761059757610597611273565b5f826112de57634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f60208284031215611341575f5ffd5b5051919050565b5f60208284031215611358575f5ffd5b815180151581146111d0575f5ffd5b5f60208284031215611377575f5ffd5b81516111d0816111d7565b5f60208284031215611392575f5ffd5b81516111d081611140565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220c22464c6f3439ec7baa53cf811ca117cabd4c51ac864d739ab4db3fe2cc834e764736f6c634300081e0033", } // EigenStrategyABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var EigenStrategyABI = EigenStrategyMetaData.ABI var EigenStrategyBin = EigenStrategyMetaData.Bin // DeployEigenStrategy deploys a new Ethereum contract, binding an instance of EigenStrategy to it. -func DeployEigenStrategy(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *EigenStrategy, error) { +func DeployEigenStrategy(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *EigenStrategy, error) { parsed, err := EigenStrategyMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployEigenStrategy(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenStrategyBin), backend, _strategyManager, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(EigenStrategyBin), backend, _strategyManager, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -636,37 +636,6 @@ func (_EigenStrategy *EigenStrategyCallerSession) UserUnderlyingView(user common return _EigenStrategy.Contract.UserUnderlyingView(&_EigenStrategy.CallOpts, user) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenStrategy *EigenStrategyCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _EigenStrategy.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenStrategy *EigenStrategySession) Version() (string, error) { - return _EigenStrategy.Contract.Version(&_EigenStrategy.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_EigenStrategy *EigenStrategyCallerSession) Version() (string, error) { - return _EigenStrategy.Contract.Version(&_EigenStrategy.CallOpts) -} - // Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. // // Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) diff --git a/pkg/bindings/Endian/binding.go b/pkg/bindings/Endian/binding.go index 85f3d78b70..4c8beeba54 100644 --- a/pkg/bindings/Endian/binding.go +++ b/pkg/bindings/Endian/binding.go @@ -32,7 +32,7 @@ var ( // EndianMetaData contains all meta data concerning the Endian contract. var EndianMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212204ec75bb4eedbcfc4e0d885385a5d7631856fe4e8cc7c998d6111857c16d9e75164736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212206682c64d5f73bd2302a0beb6578258fa58ddbde0d84f2f84d2daa444516b7cc464736f6c634300081e0033", } // EndianABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/IAVSDirectory/binding.go b/pkg/bindings/IAVSDirectory/binding.go index af82ddb0f5..7d31ff319e 100644 --- a/pkg/bindings/IAVSDirectory/binding.go +++ b/pkg/bindings/IAVSDirectory/binding.go @@ -38,7 +38,7 @@ type ISignatureUtilsMixinTypesSignatureWithSaltAndExpiry struct { // IAVSDirectoryMetaData contains all meta data concerning the IAVSDirectory contract. var IAVSDirectoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cancelSalt\",\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToEigenLayer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"OPERATOR_AVS_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_SET_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorAVSRegistrationDigestHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cancelSalt\",\"inputs\":[{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterOperatorFromAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"operatorSaltIsSpent\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerOperatorToAVS\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSignature\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithSaltAndExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSRegistrationStatusUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIAVSDirectoryTypes.OperatorAVSRegistrationStatus\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToAVS\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegisteredToEigenLayer\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", } // IAVSDirectoryABI is the input ABI used to generate the binding from. @@ -342,37 +342,6 @@ func (_IAVSDirectory *IAVSDirectoryCallerSession) OperatorSaltIsSpent(operator c return _IAVSDirectory.Contract.OperatorSaltIsSpent(&_IAVSDirectory.CallOpts, operator, salt) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IAVSDirectory *IAVSDirectoryCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IAVSDirectory.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IAVSDirectory *IAVSDirectorySession) Version() (string, error) { - return _IAVSDirectory.Contract.Version(&_IAVSDirectory.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IAVSDirectory *IAVSDirectoryCallerSession) Version() (string, error) { - return _IAVSDirectory.Contract.Version(&_IAVSDirectory.CallOpts) -} - // CancelSalt is a paid mutator transaction binding the contract method 0xec76f442. // // Solidity: function cancelSalt(bytes32 salt) returns() diff --git a/pkg/bindings/IAllocationManager/binding.go b/pkg/bindings/IAllocationManager/binding.go index 612303f00f..06c75637ba 100644 --- a/pkg/bindings/IAllocationManager/binding.go +++ b/pkg/bindings/IAllocationManager/binding.go @@ -49,6 +49,13 @@ type IAllocationManagerTypesCreateSetParams struct { Strategies []common.Address } +// IAllocationManagerTypesCreateSetParamsV2 is an auto generated low-level Go binding around an user-defined struct. +type IAllocationManagerTypesCreateSetParamsV2 struct { + OperatorSetId uint32 + Strategies []common.Address + Slasher common.Address +} + // IAllocationManagerTypesDeregisterParams is an auto generated low-level Go binding around an user-defined struct. type IAllocationManagerTypesDeregisterParams struct { Operator common.Address @@ -80,7 +87,7 @@ type OperatorSet struct { // IAllocationManagerMetaData contains all meta data concerning the IAllocationManager contract. var IAllocationManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategiesToOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearDeallocationQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToClear\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterFromOperatorSets\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.DeregisterParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"futureBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.AllocateParams[]\",\"components\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"newMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerForOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.RegisterParams\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.SlashingParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadsToSlash\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"ALLOCATION_CONFIGURATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEALLOCATION_DELAY\",\"inputs\":[],\"outputs\":[{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addStrategiesToOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearDeallocationQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"numToClear\",\"type\":\"uint16[]\",\"internalType\":\"uint16[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParamsV2[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParams[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRedistributingOperatorSets\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.CreateSetParamsV2[]\",\"components\":[{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"redistributionRecipients\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"deregisterFromOperatorSets\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.DeregisterParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatableMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocatedStrategies\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.Allocation\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"isSet\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllocations\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getEncumberedMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitude\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudes\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMaxMagnitudesAtBlock\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"blockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMemberCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMembers\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMinimumSlashableStake\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"futureBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"slashableStake\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCount\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"pendingSlasher\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRedistributionRecipient\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRegisteredSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesInOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.Allocation[]\",\"components\":[{\"name\":\"currentMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"pendingDiff\",\"type\":\"int128\",\"internalType\":\"int128\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isMemberOfOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorRedistributable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorSlashable\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRedistributingOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"migrateSlashers\",\"inputs\":[{\"name\":\"operatorSets\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"modifyAllocations\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIAllocationManagerTypes.AllocateParams[]\",\"components\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"newMagnitudes\",\"type\":\"uint64[]\",\"internalType\":\"uint64[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerForOperatorSets\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.RegisterParams\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetIds\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromOperatorSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAVSRegistrar\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"internalType\":\"contractIAVSRegistrar\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAllocationDelay\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperator\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIAllocationManagerTypes.SlashingParams\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadsToSlash\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateAVSMetadataURI\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateSlasher\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSMetadataURIUpdated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AVSRegistrarSet\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"registrar\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIAVSRegistrar\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationDelaySet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"delay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AllocationUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"magnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EncumberedMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"encumberedMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxMagnitudeUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"maxMagnitude\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAddedToOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetCreated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategies\",\"type\":\"address[]\",\"indexed\":false,\"internalType\":\"contractIStrategy[]\"},{\"name\":\"wadSlashed\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"},{\"name\":\"description\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RedistributionAddressSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"redistributionRecipient\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherMigrated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlasherUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slasher\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"effectBlock\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAVSRegistrar\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCaller\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRedistributionRecipient\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWadToSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ModificationAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NonexistentAVSMetadata\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotMemberOfSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotSlashable\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetAlreadyMigrated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SameMagnitude\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SlasherNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesMustBeInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotInOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UninitializedAllocationDelay\",\"inputs\":[]}]", } // IAllocationManagerABI is the input ABI used to generate the binding from. @@ -229,6 +236,37 @@ func (_IAllocationManager *IAllocationManagerTransactorRaw) Transact(opts *bind. return _IAllocationManager.Contract.contract.Transact(opts, method, params...) } +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_IAllocationManager *IAllocationManagerCaller) ALLOCATIONCONFIGURATIONDELAY(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "ALLOCATION_CONFIGURATION_DELAY") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_IAllocationManager *IAllocationManagerSession) ALLOCATIONCONFIGURATIONDELAY() (uint32, error) { + return _IAllocationManager.Contract.ALLOCATIONCONFIGURATIONDELAY(&_IAllocationManager.CallOpts) +} + +// ALLOCATIONCONFIGURATIONDELAY is a free data retrieval call binding the contract method 0x7bc1ef61. +// +// Solidity: function ALLOCATION_CONFIGURATION_DELAY() view returns(uint32) +func (_IAllocationManager *IAllocationManagerCallerSession) ALLOCATIONCONFIGURATIONDELAY() (uint32, error) { + return _IAllocationManager.Contract.ALLOCATIONCONFIGURATIONDELAY(&_IAllocationManager.CallOpts) +} + // DEALLOCATIONDELAY is a free data retrieval call binding the contract method 0x2981eb77. // // Solidity: function DEALLOCATION_DELAY() view returns(uint32 delay) @@ -260,6 +298,68 @@ func (_IAllocationManager *IAllocationManagerCallerSession) DEALLOCATIONDELAY() return _IAllocationManager.Contract.DEALLOCATIONDELAY(&_IAllocationManager.CallOpts) } +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IAllocationManager *IAllocationManagerCaller) Delegation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "delegation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IAllocationManager *IAllocationManagerSession) Delegation() (common.Address, error) { + return _IAllocationManager.Contract.Delegation(&_IAllocationManager.CallOpts) +} + +// Delegation is a free data retrieval call binding the contract method 0xdf5cf723. +// +// Solidity: function delegation() view returns(address) +func (_IAllocationManager *IAllocationManagerCallerSession) Delegation() (common.Address, error) { + return _IAllocationManager.Contract.Delegation(&_IAllocationManager.CallOpts) +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_IAllocationManager *IAllocationManagerCaller) EigenStrategy(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "eigenStrategy") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_IAllocationManager *IAllocationManagerSession) EigenStrategy() (common.Address, error) { + return _IAllocationManager.Contract.EigenStrategy(&_IAllocationManager.CallOpts) +} + +// EigenStrategy is a free data retrieval call binding the contract method 0xdb4df761. +// +// Solidity: function eigenStrategy() view returns(address) +func (_IAllocationManager *IAllocationManagerCallerSession) EigenStrategy() (common.Address, error) { + return _IAllocationManager.Contract.EigenStrategy(&_IAllocationManager.CallOpts) +} + // GetAVSRegistrar is a free data retrieval call binding the contract method 0x304c10cd. // // Solidity: function getAVSRegistrar(address avs) view returns(address) @@ -801,6 +901,51 @@ func (_IAllocationManager *IAllocationManagerCallerSession) GetOperatorSetCount( return _IAllocationManager.Contract.GetOperatorSetCount(&_IAllocationManager.CallOpts, avs) } +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address pendingSlasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerCaller) GetPendingSlasher(opts *bind.CallOpts, operatorSet OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "getPendingSlasher", operatorSet) + + outstruct := new(struct { + PendingSlasher common.Address + EffectBlock uint32 + }) + if err != nil { + return *outstruct, err + } + + outstruct.PendingSlasher = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.EffectBlock = *abi.ConvertType(out[1], new(uint32)).(*uint32) + + return *outstruct, err + +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address pendingSlasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerSession) GetPendingSlasher(operatorSet OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + return _IAllocationManager.Contract.GetPendingSlasher(&_IAllocationManager.CallOpts, operatorSet) +} + +// GetPendingSlasher is a free data retrieval call binding the contract method 0xd7794857. +// +// Solidity: function getPendingSlasher((address,uint32) operatorSet) view returns(address pendingSlasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerCallerSession) GetPendingSlasher(operatorSet OperatorSet) (struct { + PendingSlasher common.Address + EffectBlock uint32 +}, error) { + return _IAllocationManager.Contract.GetPendingSlasher(&_IAllocationManager.CallOpts, operatorSet) +} + // GetRedistributionRecipient is a free data retrieval call binding the contract method 0x0f3df50e. // // Solidity: function getRedistributionRecipient((address,uint32) operatorSet) view returns(address) @@ -894,6 +1039,37 @@ func (_IAllocationManager *IAllocationManagerCallerSession) GetSlashCount(operat return _IAllocationManager.Contract.GetSlashCount(&_IAllocationManager.CallOpts, operatorSet) } +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_IAllocationManager *IAllocationManagerCaller) GetSlasher(opts *bind.CallOpts, operatorSet OperatorSet) (common.Address, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "getSlasher", operatorSet) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_IAllocationManager *IAllocationManagerSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _IAllocationManager.Contract.GetSlasher(&_IAllocationManager.CallOpts, operatorSet) +} + +// GetSlasher is a free data retrieval call binding the contract method 0xd4a3fcce. +// +// Solidity: function getSlasher((address,uint32) operatorSet) view returns(address) +func (_IAllocationManager *IAllocationManagerCallerSession) GetSlasher(operatorSet OperatorSet) (common.Address, error) { + return _IAllocationManager.Contract.GetSlasher(&_IAllocationManager.CallOpts, operatorSet) +} + // GetStrategiesInOperatorSet is a free data retrieval call binding the contract method 0x4177a87c. // // Solidity: function getStrategiesInOperatorSet((address,uint32) operatorSet) view returns(address[] strategies) @@ -1112,35 +1288,97 @@ func (_IAllocationManager *IAllocationManagerCallerSession) IsRedistributingOper return _IAllocationManager.Contract.IsRedistributingOperatorSet(&_IAllocationManager.CallOpts, operatorSet) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IAllocationManager *IAllocationManagerCaller) Paused(opts *bind.CallOpts, index uint8) (bool, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "paused", index) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IAllocationManager *IAllocationManagerSession) Paused(index uint8) (bool, error) { + return _IAllocationManager.Contract.Paused(&_IAllocationManager.CallOpts, index) +} + +// Paused is a free data retrieval call binding the contract method 0x5ac86ab7. +// +// Solidity: function paused(uint8 index) view returns(bool) +func (_IAllocationManager *IAllocationManagerCallerSession) Paused(index uint8) (bool, error) { + return _IAllocationManager.Contract.Paused(&_IAllocationManager.CallOpts, index) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IAllocationManager *IAllocationManagerCaller) Paused0(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IAllocationManager.contract.Call(opts, &out, "paused0") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IAllocationManager *IAllocationManagerSession) Paused0() (*big.Int, error) { + return _IAllocationManager.Contract.Paused0(&_IAllocationManager.CallOpts) +} + +// Paused0 is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(uint256) +func (_IAllocationManager *IAllocationManagerCallerSession) Paused0() (*big.Int, error) { + return _IAllocationManager.Contract.Paused0(&_IAllocationManager.CallOpts) +} + +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function version() view returns(string) -func (_IAllocationManager *IAllocationManagerCaller) Version(opts *bind.CallOpts) (string, error) { +// Solidity: function pauserRegistry() view returns(address) +func (_IAllocationManager *IAllocationManagerCaller) PauserRegistry(opts *bind.CallOpts) (common.Address, error) { var out []interface{} - err := _IAllocationManager.contract.Call(opts, &out, "version") + err := _IAllocationManager.contract.Call(opts, &out, "pauserRegistry") if err != nil { - return *new(string), err + return *new(common.Address), err } - out0 := *abi.ConvertType(out[0], new(string)).(*string) + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) return out0, err } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function version() view returns(string) -func (_IAllocationManager *IAllocationManagerSession) Version() (string, error) { - return _IAllocationManager.Contract.Version(&_IAllocationManager.CallOpts) +// Solidity: function pauserRegistry() view returns(address) +func (_IAllocationManager *IAllocationManagerSession) PauserRegistry() (common.Address, error) { + return _IAllocationManager.Contract.PauserRegistry(&_IAllocationManager.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// PauserRegistry is a free data retrieval call binding the contract method 0x886f1195. // -// Solidity: function version() view returns(string) -func (_IAllocationManager *IAllocationManagerCallerSession) Version() (string, error) { - return _IAllocationManager.Contract.Version(&_IAllocationManager.CallOpts) +// Solidity: function pauserRegistry() view returns(address) +func (_IAllocationManager *IAllocationManagerCallerSession) PauserRegistry() (common.Address, error) { + return _IAllocationManager.Contract.PauserRegistry(&_IAllocationManager.CallOpts) } // AddStrategiesToOperatorSet is a paid mutator transaction binding the contract method 0x50feea20. @@ -1206,6 +1444,27 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) CreateOperatorSe return _IAllocationManager.Contract.CreateOperatorSets(&_IAllocationManager.TransactOpts, avs, params) } +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_IAllocationManager *IAllocationManagerTransactor) CreateOperatorSets0(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "createOperatorSets0", avs, params) +} + +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_IAllocationManager *IAllocationManagerSession) CreateOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _IAllocationManager.Contract.CreateOperatorSets0(&_IAllocationManager.TransactOpts, avs, params) +} + +// CreateOperatorSets0 is a paid mutator transaction binding the contract method 0x3dff8e7d. +// +// Solidity: function createOperatorSets(address avs, (uint32,address[],address)[] params) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) CreateOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2) (*types.Transaction, error) { + return _IAllocationManager.Contract.CreateOperatorSets0(&_IAllocationManager.TransactOpts, avs, params) +} + // CreateRedistributingOperatorSets is a paid mutator transaction binding the contract method 0x32a879e4. // // Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[])[] params, address[] redistributionRecipients) returns() @@ -1227,6 +1486,27 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) CreateRedistribu return _IAllocationManager.Contract.CreateRedistributingOperatorSets(&_IAllocationManager.TransactOpts, avs, params, redistributionRecipients) } +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_IAllocationManager *IAllocationManagerTransactor) CreateRedistributingOperatorSets0(opts *bind.TransactOpts, avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "createRedistributingOperatorSets0", avs, params, redistributionRecipients) +} + +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_IAllocationManager *IAllocationManagerSession) CreateRedistributingOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _IAllocationManager.Contract.CreateRedistributingOperatorSets0(&_IAllocationManager.TransactOpts, avs, params, redistributionRecipients) +} + +// CreateRedistributingOperatorSets0 is a paid mutator transaction binding the contract method 0xd1a83f54. +// +// Solidity: function createRedistributingOperatorSets(address avs, (uint32,address[],address)[] params, address[] redistributionRecipients) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) CreateRedistributingOperatorSets0(avs common.Address, params []IAllocationManagerTypesCreateSetParamsV2, redistributionRecipients []common.Address) (*types.Transaction, error) { + return _IAllocationManager.Contract.CreateRedistributingOperatorSets0(&_IAllocationManager.TransactOpts, avs, params, redistributionRecipients) +} + // DeregisterFromOperatorSets is a paid mutator transaction binding the contract method 0x6e3492b5. // // Solidity: function deregisterFromOperatorSets((address,address,uint32[]) params) returns() @@ -1269,6 +1549,27 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) Initialize(initi return _IAllocationManager.Contract.Initialize(&_IAllocationManager.TransactOpts, initialPausedStatus) } +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_IAllocationManager *IAllocationManagerTransactor) MigrateSlashers(opts *bind.TransactOpts, operatorSets []OperatorSet) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "migrateSlashers", operatorSets) +} + +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_IAllocationManager *IAllocationManagerSession) MigrateSlashers(operatorSets []OperatorSet) (*types.Transaction, error) { + return _IAllocationManager.Contract.MigrateSlashers(&_IAllocationManager.TransactOpts, operatorSets) +} + +// MigrateSlashers is a paid mutator transaction binding the contract method 0x957dc50b. +// +// Solidity: function migrateSlashers((address,uint32)[] operatorSets) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) MigrateSlashers(operatorSets []OperatorSet) (*types.Transaction, error) { + return _IAllocationManager.Contract.MigrateSlashers(&_IAllocationManager.TransactOpts, operatorSets) +} + // ModifyAllocations is a paid mutator transaction binding the contract method 0x952899ee. // // Solidity: function modifyAllocations(address operator, ((address,uint32),address[],uint64[])[] params) returns() @@ -1290,6 +1591,48 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) ModifyAllocation return _IAllocationManager.Contract.ModifyAllocations(&_IAllocationManager.TransactOpts, operator, params) } +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerTransactor) Pause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "pause", newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.Contract.Pause(&_IAllocationManager.TransactOpts, newPausedStatus) +} + +// Pause is a paid mutator transaction binding the contract method 0x136439dd. +// +// Solidity: function pause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) Pause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.Contract.Pause(&_IAllocationManager.TransactOpts, newPausedStatus) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IAllocationManager *IAllocationManagerTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IAllocationManager *IAllocationManagerSession) PauseAll() (*types.Transaction, error) { + return _IAllocationManager.Contract.PauseAll(&_IAllocationManager.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) PauseAll() (*types.Transaction, error) { + return _IAllocationManager.Contract.PauseAll(&_IAllocationManager.TransactOpts) +} + // RegisterForOperatorSets is a paid mutator transaction binding the contract method 0xadc2e3d9. // // Solidity: function registerForOperatorSets(address operator, (address,uint32[],bytes) params) returns() @@ -1395,6 +1738,27 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) SlashOperator(av return _IAllocationManager.Contract.SlashOperator(&_IAllocationManager.TransactOpts, avs, params) } +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerTransactor) Unpause(opts *bind.TransactOpts, newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "unpause", newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.Contract.Unpause(&_IAllocationManager.TransactOpts, newPausedStatus) +} + +// Unpause is a paid mutator transaction binding the contract method 0xfabc1cbc. +// +// Solidity: function unpause(uint256 newPausedStatus) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) Unpause(newPausedStatus *big.Int) (*types.Transaction, error) { + return _IAllocationManager.Contract.Unpause(&_IAllocationManager.TransactOpts, newPausedStatus) +} + // UpdateAVSMetadataURI is a paid mutator transaction binding the contract method 0xa9821821. // // Solidity: function updateAVSMetadataURI(address avs, string metadataURI) returns() @@ -1416,6 +1780,27 @@ func (_IAllocationManager *IAllocationManagerTransactorSession) UpdateAVSMetadat return _IAllocationManager.Contract.UpdateAVSMetadataURI(&_IAllocationManager.TransactOpts, avs, metadataURI) } +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_IAllocationManager *IAllocationManagerTransactor) UpdateSlasher(opts *bind.TransactOpts, operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _IAllocationManager.contract.Transact(opts, "updateSlasher", operatorSet, slasher) +} + +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_IAllocationManager *IAllocationManagerSession) UpdateSlasher(operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _IAllocationManager.Contract.UpdateSlasher(&_IAllocationManager.TransactOpts, operatorSet, slasher) +} + +// UpdateSlasher is a paid mutator transaction binding the contract method 0x6c9d7c58. +// +// Solidity: function updateSlasher((address,uint32) operatorSet, address slasher) returns() +func (_IAllocationManager *IAllocationManagerTransactorSession) UpdateSlasher(operatorSet OperatorSet, slasher common.Address) (*types.Transaction, error) { + return _IAllocationManager.Contract.UpdateSlasher(&_IAllocationManager.TransactOpts, operatorSet, slasher) +} + // IAllocationManagerAVSMetadataURIUpdatedIterator is returned from FilterAVSMetadataURIUpdated and is used to iterate over the raw logs and unpacked data for AVSMetadataURIUpdated events raised by the IAllocationManager contract. type IAllocationManagerAVSMetadataURIUpdatedIterator struct { Event *IAllocationManagerAVSMetadataURIUpdated // Event containing the contract specifics and raw log @@ -2804,9 +3189,9 @@ func (_IAllocationManager *IAllocationManagerFilterer) ParseOperatorSlashed(log return event, nil } -// IAllocationManagerRedistributionAddressSetIterator is returned from FilterRedistributionAddressSet and is used to iterate over the raw logs and unpacked data for RedistributionAddressSet events raised by the IAllocationManager contract. -type IAllocationManagerRedistributionAddressSetIterator struct { - Event *IAllocationManagerRedistributionAddressSet // Event containing the contract specifics and raw log +// IAllocationManagerPausedIterator is returned from FilterPaused and is used to iterate over the raw logs and unpacked data for Paused events raised by the IAllocationManager contract. +type IAllocationManagerPausedIterator struct { + Event *IAllocationManagerPaused // 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 @@ -2820,7 +3205,7 @@ type IAllocationManagerRedistributionAddressSetIterator 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 *IAllocationManagerRedistributionAddressSetIterator) Next() bool { +func (it *IAllocationManagerPausedIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2829,7 +3214,7 @@ func (it *IAllocationManagerRedistributionAddressSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IAllocationManagerRedistributionAddressSet) + it.Event = new(IAllocationManagerPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2844,7 +3229,7 @@ func (it *IAllocationManagerRedistributionAddressSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAllocationManagerRedistributionAddressSet) + it.Event = new(IAllocationManagerPaused) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2860,42 +3245,52 @@ func (it *IAllocationManagerRedistributionAddressSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAllocationManagerRedistributionAddressSetIterator) Error() error { +func (it *IAllocationManagerPausedIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAllocationManagerRedistributionAddressSetIterator) Close() error { +func (it *IAllocationManagerPausedIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAllocationManagerRedistributionAddressSet represents a RedistributionAddressSet event raised by the IAllocationManager contract. -type IAllocationManagerRedistributionAddressSet struct { - OperatorSet OperatorSet - RedistributionRecipient common.Address - Raw types.Log // Blockchain specific contextual infos +// IAllocationManagerPaused represents a Paused event raised by the IAllocationManager contract. +type IAllocationManagerPaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos } -// FilterRedistributionAddressSet is a free log retrieval operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// FilterPaused is a free log retrieval operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) -func (_IAllocationManager *IAllocationManagerFilterer) FilterRedistributionAddressSet(opts *bind.FilterOpts) (*IAllocationManagerRedistributionAddressSetIterator, error) { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) FilterPaused(opts *bind.FilterOpts, account []common.Address) (*IAllocationManagerPausedIterator, error) { - logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "RedistributionAddressSet") + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "Paused", accountRule) if err != nil { return nil, err } - return &IAllocationManagerRedistributionAddressSetIterator{contract: _IAllocationManager.contract, event: "RedistributionAddressSet", logs: logs, sub: sub}, nil + return &IAllocationManagerPausedIterator{contract: _IAllocationManager.contract, event: "Paused", logs: logs, sub: sub}, nil } -// WatchRedistributionAddressSet is a free log subscription operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// WatchPaused is a free log subscription operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) -func (_IAllocationManager *IAllocationManagerFilterer) WatchRedistributionAddressSet(opts *bind.WatchOpts, sink chan<- *IAllocationManagerRedistributionAddressSet) (event.Subscription, error) { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) WatchPaused(opts *bind.WatchOpts, sink chan<- *IAllocationManagerPaused, account []common.Address) (event.Subscription, error) { - logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "RedistributionAddressSet") + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "Paused", accountRule) if err != nil { return nil, err } @@ -2905,8 +3300,8 @@ func (_IAllocationManager *IAllocationManagerFilterer) WatchRedistributionAddres select { case log := <-logs: // New log arrived, parse the event and forward to the user - event := new(IAllocationManagerRedistributionAddressSet) - if err := _IAllocationManager.contract.UnpackLog(event, "RedistributionAddressSet", log); err != nil { + event := new(IAllocationManagerPaused) + if err := _IAllocationManager.contract.UnpackLog(event, "Paused", log); err != nil { return err } event.Raw = log @@ -2927,21 +3322,21 @@ func (_IAllocationManager *IAllocationManagerFilterer) WatchRedistributionAddres }), nil } -// ParseRedistributionAddressSet is a log parse operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// ParsePaused is a log parse operation binding the contract event 0xab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d. // -// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) -func (_IAllocationManager *IAllocationManagerFilterer) ParseRedistributionAddressSet(log types.Log) (*IAllocationManagerRedistributionAddressSet, error) { - event := new(IAllocationManagerRedistributionAddressSet) - if err := _IAllocationManager.contract.UnpackLog(event, "RedistributionAddressSet", log); err != nil { +// Solidity: event Paused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) ParsePaused(log types.Log) (*IAllocationManagerPaused, error) { + event := new(IAllocationManagerPaused) + if err := _IAllocationManager.contract.UnpackLog(event, "Paused", log); err != nil { return nil, err } event.Raw = log return event, nil } -// IAllocationManagerStrategyAddedToOperatorSetIterator is returned from FilterStrategyAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyAddedToOperatorSet events raised by the IAllocationManager contract. -type IAllocationManagerStrategyAddedToOperatorSetIterator struct { - Event *IAllocationManagerStrategyAddedToOperatorSet // Event containing the contract specifics and raw log +// IAllocationManagerRedistributionAddressSetIterator is returned from FilterRedistributionAddressSet and is used to iterate over the raw logs and unpacked data for RedistributionAddressSet events raised by the IAllocationManager contract. +type IAllocationManagerRedistributionAddressSetIterator struct { + Event *IAllocationManagerRedistributionAddressSet // 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 @@ -2955,7 +3350,7 @@ type IAllocationManagerStrategyAddedToOperatorSetIterator 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 *IAllocationManagerStrategyAddedToOperatorSetIterator) Next() bool { +func (it *IAllocationManagerRedistributionAddressSetIterator) Next() bool { // If the iterator failed, stop iterating if it.fail != nil { return false @@ -2964,7 +3359,7 @@ func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Next() bool { if it.done { select { case log := <-it.logs: - it.Event = new(IAllocationManagerStrategyAddedToOperatorSet) + it.Event = new(IAllocationManagerRedistributionAddressSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2979,7 +3374,7 @@ func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Next() bool { // Iterator still in progress, wait for either a data or an error event select { case log := <-it.logs: - it.Event = new(IAllocationManagerStrategyAddedToOperatorSet) + it.Event = new(IAllocationManagerRedistributionAddressSet) if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { it.fail = err return false @@ -2995,18 +3390,424 @@ func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Next() bool { } // Error returns any retrieval or parsing error occurred during filtering. -func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Error() error { +func (it *IAllocationManagerRedistributionAddressSetIterator) Error() error { return it.fail } // Close terminates the iteration process, releasing any pending underlying // resources. -func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Close() error { +func (it *IAllocationManagerRedistributionAddressSetIterator) Close() error { it.sub.Unsubscribe() return nil } -// IAllocationManagerStrategyAddedToOperatorSet represents a StrategyAddedToOperatorSet event raised by the IAllocationManager contract. +// IAllocationManagerRedistributionAddressSet represents a RedistributionAddressSet event raised by the IAllocationManager contract. +type IAllocationManagerRedistributionAddressSet struct { + OperatorSet OperatorSet + RedistributionRecipient common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRedistributionAddressSet is a free log retrieval operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_IAllocationManager *IAllocationManagerFilterer) FilterRedistributionAddressSet(opts *bind.FilterOpts) (*IAllocationManagerRedistributionAddressSetIterator, error) { + + logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "RedistributionAddressSet") + if err != nil { + return nil, err + } + return &IAllocationManagerRedistributionAddressSetIterator{contract: _IAllocationManager.contract, event: "RedistributionAddressSet", logs: logs, sub: sub}, nil +} + +// WatchRedistributionAddressSet is a free log subscription operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_IAllocationManager *IAllocationManagerFilterer) WatchRedistributionAddressSet(opts *bind.WatchOpts, sink chan<- *IAllocationManagerRedistributionAddressSet) (event.Subscription, error) { + + logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "RedistributionAddressSet") + 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(IAllocationManagerRedistributionAddressSet) + if err := _IAllocationManager.contract.UnpackLog(event, "RedistributionAddressSet", 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 +} + +// ParseRedistributionAddressSet is a log parse operation binding the contract event 0x90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e. +// +// Solidity: event RedistributionAddressSet((address,uint32) operatorSet, address redistributionRecipient) +func (_IAllocationManager *IAllocationManagerFilterer) ParseRedistributionAddressSet(log types.Log) (*IAllocationManagerRedistributionAddressSet, error) { + event := new(IAllocationManagerRedistributionAddressSet) + if err := _IAllocationManager.contract.UnpackLog(event, "RedistributionAddressSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAllocationManagerSlasherMigratedIterator is returned from FilterSlasherMigrated and is used to iterate over the raw logs and unpacked data for SlasherMigrated events raised by the IAllocationManager contract. +type IAllocationManagerSlasherMigratedIterator struct { + Event *IAllocationManagerSlasherMigrated // 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 *IAllocationManagerSlasherMigratedIterator) 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(IAllocationManagerSlasherMigrated) + 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(IAllocationManagerSlasherMigrated) + 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 *IAllocationManagerSlasherMigratedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAllocationManagerSlasherMigratedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAllocationManagerSlasherMigrated represents a SlasherMigrated event raised by the IAllocationManager contract. +type IAllocationManagerSlasherMigrated struct { + OperatorSet OperatorSet + Slasher common.Address + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherMigrated is a free log retrieval operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_IAllocationManager *IAllocationManagerFilterer) FilterSlasherMigrated(opts *bind.FilterOpts) (*IAllocationManagerSlasherMigratedIterator, error) { + + logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "SlasherMigrated") + if err != nil { + return nil, err + } + return &IAllocationManagerSlasherMigratedIterator{contract: _IAllocationManager.contract, event: "SlasherMigrated", logs: logs, sub: sub}, nil +} + +// WatchSlasherMigrated is a free log subscription operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_IAllocationManager *IAllocationManagerFilterer) WatchSlasherMigrated(opts *bind.WatchOpts, sink chan<- *IAllocationManagerSlasherMigrated) (event.Subscription, error) { + + logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "SlasherMigrated") + 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(IAllocationManagerSlasherMigrated) + if err := _IAllocationManager.contract.UnpackLog(event, "SlasherMigrated", 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 +} + +// ParseSlasherMigrated is a log parse operation binding the contract event 0xf0c8fc7d71f647bd3a88ac369112517f6a4b8038e71913f2d20f71f877dfc725. +// +// Solidity: event SlasherMigrated((address,uint32) operatorSet, address slasher) +func (_IAllocationManager *IAllocationManagerFilterer) ParseSlasherMigrated(log types.Log) (*IAllocationManagerSlasherMigrated, error) { + event := new(IAllocationManagerSlasherMigrated) + if err := _IAllocationManager.contract.UnpackLog(event, "SlasherMigrated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAllocationManagerSlasherUpdatedIterator is returned from FilterSlasherUpdated and is used to iterate over the raw logs and unpacked data for SlasherUpdated events raised by the IAllocationManager contract. +type IAllocationManagerSlasherUpdatedIterator struct { + Event *IAllocationManagerSlasherUpdated // 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 *IAllocationManagerSlasherUpdatedIterator) 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(IAllocationManagerSlasherUpdated) + 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(IAllocationManagerSlasherUpdated) + 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 *IAllocationManagerSlasherUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAllocationManagerSlasherUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAllocationManagerSlasherUpdated represents a SlasherUpdated event raised by the IAllocationManager contract. +type IAllocationManagerSlasherUpdated struct { + OperatorSet OperatorSet + Slasher common.Address + EffectBlock uint32 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSlasherUpdated is a free log retrieval operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerFilterer) FilterSlasherUpdated(opts *bind.FilterOpts) (*IAllocationManagerSlasherUpdatedIterator, error) { + + logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "SlasherUpdated") + if err != nil { + return nil, err + } + return &IAllocationManagerSlasherUpdatedIterator{contract: _IAllocationManager.contract, event: "SlasherUpdated", logs: logs, sub: sub}, nil +} + +// WatchSlasherUpdated is a free log subscription operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerFilterer) WatchSlasherUpdated(opts *bind.WatchOpts, sink chan<- *IAllocationManagerSlasherUpdated) (event.Subscription, error) { + + logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "SlasherUpdated") + 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(IAllocationManagerSlasherUpdated) + if err := _IAllocationManager.contract.UnpackLog(event, "SlasherUpdated", 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 +} + +// ParseSlasherUpdated is a log parse operation binding the contract event 0x3873f29d7a65a4d75f5ba28909172f486216a1420e77c3c2720815951a6b4f57. +// +// Solidity: event SlasherUpdated((address,uint32) operatorSet, address slasher, uint32 effectBlock) +func (_IAllocationManager *IAllocationManagerFilterer) ParseSlasherUpdated(log types.Log) (*IAllocationManagerSlasherUpdated, error) { + event := new(IAllocationManagerSlasherUpdated) + if err := _IAllocationManager.contract.UnpackLog(event, "SlasherUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IAllocationManagerStrategyAddedToOperatorSetIterator is returned from FilterStrategyAddedToOperatorSet and is used to iterate over the raw logs and unpacked data for StrategyAddedToOperatorSet events raised by the IAllocationManager contract. +type IAllocationManagerStrategyAddedToOperatorSetIterator struct { + Event *IAllocationManagerStrategyAddedToOperatorSet // 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 *IAllocationManagerStrategyAddedToOperatorSetIterator) 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(IAllocationManagerStrategyAddedToOperatorSet) + 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(IAllocationManagerStrategyAddedToOperatorSet) + 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 *IAllocationManagerStrategyAddedToOperatorSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAllocationManagerStrategyAddedToOperatorSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAllocationManagerStrategyAddedToOperatorSet represents a StrategyAddedToOperatorSet event raised by the IAllocationManager contract. type IAllocationManagerStrategyAddedToOperatorSet struct { OperatorSet OperatorSet Strategy common.Address @@ -3208,3 +4009,148 @@ func (_IAllocationManager *IAllocationManagerFilterer) ParseStrategyRemovedFromO event.Raw = log return event, nil } + +// IAllocationManagerUnpausedIterator is returned from FilterUnpaused and is used to iterate over the raw logs and unpacked data for Unpaused events raised by the IAllocationManager contract. +type IAllocationManagerUnpausedIterator struct { + Event *IAllocationManagerUnpaused // 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 *IAllocationManagerUnpausedIterator) 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(IAllocationManagerUnpaused) + 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(IAllocationManagerUnpaused) + 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 *IAllocationManagerUnpausedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IAllocationManagerUnpausedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IAllocationManagerUnpaused represents a Unpaused event raised by the IAllocationManager contract. +type IAllocationManagerUnpaused struct { + Account common.Address + NewPausedStatus *big.Int + Raw types.Log // Blockchain specific contextual infos +} + +// FilterUnpaused is a free log retrieval operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) FilterUnpaused(opts *bind.FilterOpts, account []common.Address) (*IAllocationManagerUnpausedIterator, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IAllocationManager.contract.FilterLogs(opts, "Unpaused", accountRule) + if err != nil { + return nil, err + } + return &IAllocationManagerUnpausedIterator{contract: _IAllocationManager.contract, event: "Unpaused", logs: logs, sub: sub}, nil +} + +// WatchUnpaused is a free log subscription operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) WatchUnpaused(opts *bind.WatchOpts, sink chan<- *IAllocationManagerUnpaused, account []common.Address) (event.Subscription, error) { + + var accountRule []interface{} + for _, accountItem := range account { + accountRule = append(accountRule, accountItem) + } + + logs, sub, err := _IAllocationManager.contract.WatchLogs(opts, "Unpaused", accountRule) + 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(IAllocationManagerUnpaused) + if err := _IAllocationManager.contract.UnpackLog(event, "Unpaused", 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 +} + +// ParseUnpaused is a log parse operation binding the contract event 0x3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c. +// +// Solidity: event Unpaused(address indexed account, uint256 newPausedStatus) +func (_IAllocationManager *IAllocationManagerFilterer) ParseUnpaused(log types.Log) (*IAllocationManagerUnpaused, error) { + event := new(IAllocationManagerUnpaused) + if err := _IAllocationManager.contract.UnpackLog(event, "Unpaused", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IDelegationManager/binding.go b/pkg/bindings/IDelegationManager/binding.go index c6971dec4d..328e139ea9 100644 --- a/pkg/bindings/IDelegationManager/binding.go +++ b/pkg/bindings/IDelegationManager/binding.go @@ -61,7 +61,7 @@ type OperatorSet struct { // IDelegationManagerMetaData contains all meta data concerning the IDelegationManager contract. var IDelegationManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DELEGATION_APPROVAL_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateDelegationApprovalDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateWithdrawalRoot\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeQueuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"tokens\",\"type\":\"address[][]\",\"internalType\":\"contractIERC20[][]\"},{\"name\":\"receiveAsTokens\",\"type\":\"bool[]\",\"internalType\":\"bool[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"convertToDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"cumulativeWithdrawalsQueued\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"decreaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"curDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"beaconChainSlashingFactorDecrease\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegateTo\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"approverSignatureAndExpiry\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegatedTo\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApprover\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationApproverSaltIsSpent\",\"inputs\":[{\"name\":\"_delegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"salt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositScalingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDepositedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorsShares\",\"inputs\":[{\"name\":\"operators\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawal\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawalRoots\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getQueuedWithdrawals\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawals\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal[]\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"shares\",\"type\":\"uint256[][]\",\"internalType\":\"uint256[][]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getSlashableSharesInQueue\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawableShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[{\"name\":\"withdrawableShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseDelegatedShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevDepositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addedShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperator\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minWithdrawalDelayBlocks\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"modifyOperatorDetails\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queueWithdrawals\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple[]\",\"internalType\":\"structIDelegationManagerTypes.QueuedWithdrawalParams[]\",\"components\":[{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"depositShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"__deprecated_withdrawer\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"queuedWithdrawals\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawal\",\"type\":\"tuple\",\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"redelegate\",\"inputs\":[{\"name\":\"newOperator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newOperatorApproverSig\",\"type\":\"tuple\",\"internalType\":\"structISignatureUtilsMixinTypes.SignatureWithExpiry\",\"components\":[{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"approverSalt\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerAsOperator\",\"inputs\":[{\"name\":\"initDelegationApprover\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"allocationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"slashOperatorShares\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"prevMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"newMaxMagnitude\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"totalDepositSharesToSlash\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"undelegate\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"withdrawalRoots\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorMetadataURI\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"DelegationApproverUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newDelegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DepositScalingFactorUpdated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"newDepositScalingFactor\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorMetadataURIUpdated\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorRegistered\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"delegationApprover\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesDecreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesIncreased\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSharesSlashed\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"totalSlashedShares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalCompleted\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SlashingWithdrawalQueued\",\"inputs\":[{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"withdrawal\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIDelegationManagerTypes.Withdrawal\",\"components\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"delegatedTo\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startBlock\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"strategies\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"scaledShares\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]},{\"name\":\"sharesToWithdraw\",\"type\":\"uint256[]\",\"indexed\":false,\"internalType\":\"uint256[]\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerDelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerForceUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StakerUndelegated\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CallerCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FullySlashed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotActivelyDelegated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyAllocationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManagerOrEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsCannotUndelegate\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SaltSpent\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalDelayNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalNotQueued\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawerNotCaller\",\"inputs\":[]}]", } // IDelegationManagerABI is the input ABI used to generate the binding from. @@ -966,37 +966,6 @@ func (_IDelegationManager *IDelegationManagerCallerSession) QueuedWithdrawals(wi return _IDelegationManager.Contract.QueuedWithdrawals(&_IDelegationManager.CallOpts, withdrawalRoot) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IDelegationManager *IDelegationManagerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IDelegationManager.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IDelegationManager *IDelegationManagerSession) Version() (string, error) { - return _IDelegationManager.Contract.Version(&_IDelegationManager.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IDelegationManager *IDelegationManagerCallerSession) Version() (string, error) { - return _IDelegationManager.Contract.Version(&_IDelegationManager.CallOpts) -} - // CompleteQueuedWithdrawal is a paid mutator transaction binding the contract method 0xe4cc3f90. // // Solidity: function completeQueuedWithdrawal((address,address,address,uint256,uint32,address[],uint256[]) withdrawal, address[] tokens, bool receiveAsTokens) returns() diff --git a/pkg/bindings/IEigenPod/binding.go b/pkg/bindings/IEigenPod/binding.go index bf36a23784..904af5c437 100644 --- a/pkg/bindings/IEigenPod/binding.go +++ b/pkg/bindings/IEigenPod/binding.go @@ -85,7 +85,7 @@ type IEigenPodTypesWithdrawalRequest struct { // IEigenPodMetaData contains all meta data concerning the IEigenPod contract. var IEigenPodMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"activeValidatorCount\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"checkpointBalanceExitedGwei\",\"inputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpoint\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.Checkpoint\",\"components\":[{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proofsRemaining\",\"type\":\"uint24\",\"internalType\":\"uint24\"},{\"name\":\"podBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"balanceDeltasGwei\",\"type\":\"int64\",\"internalType\":\"int64\"},{\"name\":\"prevBeaconBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currentCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eigenPodManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPodManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getConsolidationRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getParentBlockRoot\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWithdrawalRequestFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"lastCheckpointTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proofSubmitter\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recoverTokens\",\"inputs\":[{\"name\":\"tokenList\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"},{\"name\":\"amountsToWithdraw\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"requestConsolidation\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.ConsolidationRequest[]\",\"components\":[{\"name\":\"srcPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"targetPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"requestWithdrawal\",\"inputs\":[{\"name\":\"requests\",\"type\":\"tuple[]\",\"internalType\":\"structIEigenPodTypes.WithdrawalRequest[]\",\"components\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"amountGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"setProofSubmitter\",\"inputs\":[{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"startCheckpoint\",\"inputs\":[{\"name\":\"revertIfNoBalance\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"validatorPubkeyHashToInfo\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorPubkeyToInfo\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIEigenPodTypes.ValidatorInfo\",\"components\":[{\"name\":\"validatorIndex\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"restakedBalanceGwei\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"lastCheckpointedAt\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"validatorPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"validatorStatus\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIEigenPodTypes.VALIDATOR_STATUS\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"verifyCheckpointProofs\",\"inputs\":[{\"name\":\"balanceContainerProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.BalanceContainerProof\",\"components\":[{\"name\":\"balanceContainerRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proofs\",\"type\":\"tuple[]\",\"internalType\":\"structBeaconChainProofs.BalanceProof[]\",\"components\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"balanceRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyStaleBalance\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"proof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.ValidatorProof\",\"components\":[{\"name\":\"validatorFields\",\"type\":\"bytes32[]\",\"internalType\":\"bytes32[]\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"verifyWithdrawalCredentials\",\"inputs\":[{\"name\":\"beaconTimestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stateRootProof\",\"type\":\"tuple\",\"internalType\":\"structBeaconChainProofs.StateRootProof\",\"components\":[{\"name\":\"beaconStateRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"validatorIndices\",\"type\":\"uint40[]\",\"internalType\":\"uint40[]\"},{\"name\":\"validatorFieldsProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"validatorFields\",\"type\":\"bytes32[][]\",\"internalType\":\"bytes32[][]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawRestakedBeaconChainETH\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawableRestakedExecutionLayerGwei\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"CheckpointCreated\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"beaconBlockRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validatorCount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"CheckpointFinalized\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"totalShareDeltaWei\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ConsolidationRequested\",\"inputs\":[{\"name\":\"sourcePubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"targetPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"EigenPodStaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExitRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NonBeaconChainETHReceived\",\"inputs\":[{\"name\":\"amountReceived\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofSubmitterUpdated\",\"inputs\":[{\"name\":\"prevProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newProofSubmitter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RestakedBeaconChainETHWithdrawn\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SwitchToCompoundingRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorBalanceUpdated\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"balanceTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newValidatorBalanceGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorCheckpointed\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRestaked\",\"inputs\":[{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWithdrawn\",\"inputs\":[{\"name\":\"checkpointTimestamp\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"pubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"WithdrawalRequested\",\"inputs\":[{\"name\":\"validatorPubkeyHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"withdrawalAmountGwei\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BeaconTimestampBeforeLatestCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BeaconTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotCheckpointTwiceInSingleBlock\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CheckpointAlreadyActive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CredentialsAlreadyVerified\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeQueryFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ForkTimestampZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientFunds\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InsufficientWithdrawableBalance\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEIP4788Response\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPubKeyLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MsgValueNot32ETH\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoActiveCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoBalanceToCheckpoint\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPodOwnerOrProofSubmitter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PredeployFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampOutOfRange\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorInactiveOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorIsExitingBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotActiveInPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ValidatorNotSlashedOnBeaconChain\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalCredentialsNotForEigenPod\",\"inputs\":[]}]", } // IEigenPodABI is the input ABI used to generate the binding from. @@ -699,37 +699,6 @@ func (_IEigenPod *IEigenPodCallerSession) ValidatorStatus0(pubkeyHash [32]byte) return _IEigenPod.Contract.ValidatorStatus0(&_IEigenPod.CallOpts, pubkeyHash) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPod *IEigenPodCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IEigenPod.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPod *IEigenPodSession) Version() (string, error) { - return _IEigenPod.Contract.Version(&_IEigenPod.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPod *IEigenPodCallerSession) Version() (string, error) { - return _IEigenPod.Contract.Version(&_IEigenPod.CallOpts) -} - // WithdrawableRestakedExecutionLayerGwei is a free data retrieval call binding the contract method 0x3474aa16. // // Solidity: function withdrawableRestakedExecutionLayerGwei() view returns(uint64) diff --git a/pkg/bindings/IEigenPodManager/binding.go b/pkg/bindings/IEigenPodManager/binding.go index 0b3daab050..3eab2fe44e 100644 --- a/pkg/bindings/IEigenPodManager/binding.go +++ b/pkg/bindings/IEigenPodManager/binding.go @@ -37,7 +37,7 @@ type OperatorSet struct { // IEigenPodManagerMetaData contains all meta data concerning the IEigenPodManager contract. var IEigenPodManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainSlashingFactor\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnableETHShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createPod\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"eigenPodBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ethPOS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIETHPOSDeposit\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"hasPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"numPods\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ownerToPod\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIEigenPod\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pectraForkTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"podOwnerDepositShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"recordBeaconChainETHBalanceUpdate\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"prevRestakedBalanceWei\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"balanceDeltaWei\",\"type\":\"int256\",\"internalType\":\"int256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setPectraForkTimestamp\",\"inputs\":[{\"name\":\"timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setProofTimestampSetter\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stake\",\"inputs\":[{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"depositDataRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BeaconChainETHDeposited\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainETHWithdrawalCompleted\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"delegatedAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawer\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"withdrawalRoot\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BeaconChainSlashingFactorDecreased\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"prevBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"newBeaconChainSlashingFactor\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableETHSharesIncreased\",\"inputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewTotalShares\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newTotalShares\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PectraForkTimestampSet\",\"inputs\":[{\"name\":\"newPectraForkTimestamp\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodDeployed\",\"inputs\":[{\"name\":\"eigenPod\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PodSharesUpdated\",\"inputs\":[{\"name\":\"podOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"sharesDelta\",\"type\":\"int256\",\"indexed\":false,\"internalType\":\"int256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ProofTimestampSetterSet\",\"inputs\":[{\"name\":\"newProofTimestampSetter\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EigenPodAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStrategy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LegacyWithdrawalsNotCompleted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyEigenPod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyProofTimestampSetter\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNegative\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesNotMultipleOfGwei\",\"inputs\":[]}]", } // IEigenPodManagerABI is the input ABI used to generate the binding from. @@ -651,37 +651,6 @@ func (_IEigenPodManager *IEigenPodManagerCallerSession) StakerDepositShares(user return _IEigenPodManager.Contract.StakerDepositShares(&_IEigenPodManager.CallOpts, user, strategy) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPodManager *IEigenPodManagerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IEigenPodManager.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPodManager *IEigenPodManagerSession) Version() (string, error) { - return _IEigenPodManager.Contract.Version(&_IEigenPodManager.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IEigenPodManager *IEigenPodManagerCallerSession) Version() (string, error) { - return _IEigenPodManager.Contract.Version(&_IEigenPodManager.CallOpts) -} - // AddShares is a paid mutator transaction binding the contract method 0x50ff7225. // // Solidity: function addShares(address staker, address strategy, uint256 shares) returns(uint256, uint256) diff --git a/pkg/bindings/IKeyRegistrar/binding.go b/pkg/bindings/IKeyRegistrar/binding.go index 095797fd16..666efd4022 100644 --- a/pkg/bindings/IKeyRegistrar/binding.go +++ b/pkg/bindings/IKeyRegistrar/binding.go @@ -49,7 +49,7 @@ type OperatorSet struct { // IKeyRegistrarMetaData contains all meta data concerning the IKeyRegistrar contract. var IKeyRegistrarMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", } // IKeyRegistrarABI is the input ABI used to generate the binding from. @@ -554,37 +554,6 @@ func (_IKeyRegistrar *IKeyRegistrarCallerSession) IsRegistered(operatorSet Opera return _IKeyRegistrar.Contract.IsRegistered(&_IKeyRegistrar.CallOpts, operatorSet, operator) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IKeyRegistrar *IKeyRegistrarCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IKeyRegistrar.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IKeyRegistrar *IKeyRegistrarSession) Version() (string, error) { - return _IKeyRegistrar.Contract.Version(&_IKeyRegistrar.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IKeyRegistrar *IKeyRegistrarCallerSession) Version() (string, error) { - return _IKeyRegistrar.Contract.Version(&_IKeyRegistrar.CallOpts) -} - // ConfigureOperatorSet is a paid mutator transaction binding the contract method 0xea0d8149. // // Solidity: function configureOperatorSet((address,uint32) operatorSet, uint8 curveType) returns() diff --git a/pkg/bindings/IPermissionController/binding.go b/pkg/bindings/IPermissionController/binding.go index 37db8f72f3..99d2e32b67 100644 --- a/pkg/bindings/IPermissionController/binding.go +++ b/pkg/bindings/IPermissionController/binding.go @@ -31,7 +31,7 @@ var ( // IPermissionControllerMetaData contains all meta data concerning the IPermissionController contract. var IPermissionControllerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]}]", } // IPermissionControllerABI is the input ABI used to generate the binding from. @@ -180,6 +180,37 @@ func (_IPermissionController *IPermissionControllerTransactorRaw) Transact(opts return _IPermissionController.Contract.contract.Transact(opts, method, params...) } +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_IPermissionController *IPermissionControllerCaller) CanCall(opts *bind.CallOpts, account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + var out []interface{} + err := _IPermissionController.contract.Call(opts, &out, "canCall", account, caller, target, selector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_IPermissionController *IPermissionControllerSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + return _IPermissionController.Contract.CanCall(&_IPermissionController.CallOpts, account, caller, target, selector) +} + +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_IPermissionController *IPermissionControllerCallerSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + return _IPermissionController.Contract.CanCall(&_IPermissionController.CallOpts, account, caller, target, selector) +} + // GetAdmins is a free data retrieval call binding the contract method 0xad5f2210. // // Solidity: function getAdmins(address account) view returns(address[]) @@ -211,6 +242,69 @@ func (_IPermissionController *IPermissionControllerCallerSession) GetAdmins(acco return _IPermissionController.Contract.GetAdmins(&_IPermissionController.CallOpts, account) } +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_IPermissionController *IPermissionControllerCaller) GetAppointeePermissions(opts *bind.CallOpts, account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + var out []interface{} + err := _IPermissionController.contract.Call(opts, &out, "getAppointeePermissions", account, appointee) + + if err != nil { + return *new([]common.Address), *new([][4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([][4]byte)).(*[][4]byte) + + return out0, out1, err + +} + +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_IPermissionController *IPermissionControllerSession) GetAppointeePermissions(account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + return _IPermissionController.Contract.GetAppointeePermissions(&_IPermissionController.CallOpts, account, appointee) +} + +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_IPermissionController *IPermissionControllerCallerSession) GetAppointeePermissions(account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + return _IPermissionController.Contract.GetAppointeePermissions(&_IPermissionController.CallOpts, account, appointee) +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_IPermissionController *IPermissionControllerCaller) GetAppointees(opts *bind.CallOpts, account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + var out []interface{} + err := _IPermissionController.contract.Call(opts, &out, "getAppointees", account, target, selector) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_IPermissionController *IPermissionControllerSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + return _IPermissionController.Contract.GetAppointees(&_IPermissionController.CallOpts, account, target, selector) +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_IPermissionController *IPermissionControllerCallerSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + return _IPermissionController.Contract.GetAppointees(&_IPermissionController.CallOpts, account, target, selector) +} + // GetPendingAdmins is a free data retrieval call binding the contract method 0x6bddfa1f. // // Solidity: function getPendingAdmins(address account) view returns(address[]) @@ -304,37 +398,6 @@ func (_IPermissionController *IPermissionControllerCallerSession) IsPendingAdmin return _IPermissionController.Contract.IsPendingAdmin(&_IPermissionController.CallOpts, account, pendingAdmin) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IPermissionController *IPermissionControllerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IPermissionController.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IPermissionController *IPermissionControllerSession) Version() (string, error) { - return _IPermissionController.Contract.Version(&_IPermissionController.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IPermissionController *IPermissionControllerCallerSession) Version() (string, error) { - return _IPermissionController.Contract.Version(&_IPermissionController.CallOpts) -} - // AcceptAdmin is a paid mutator transaction binding the contract method 0x628806ef. // // Solidity: function acceptAdmin(address account) returns() @@ -377,69 +440,6 @@ func (_IPermissionController *IPermissionControllerTransactorSession) AddPending return _IPermissionController.Contract.AddPendingAdmin(&_IPermissionController.TransactOpts, account, admin) } -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_IPermissionController *IPermissionControllerTransactor) CanCall(opts *bind.TransactOpts, account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.contract.Transact(opts, "canCall", account, caller, target, selector) -} - -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_IPermissionController *IPermissionControllerSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.Contract.CanCall(&_IPermissionController.TransactOpts, account, caller, target, selector) -} - -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_IPermissionController *IPermissionControllerTransactorSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.Contract.CanCall(&_IPermissionController.TransactOpts, account, caller, target, selector) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_IPermissionController *IPermissionControllerTransactor) GetAppointeePermissions(opts *bind.TransactOpts, account common.Address, appointee common.Address) (*types.Transaction, error) { - return _IPermissionController.contract.Transact(opts, "getAppointeePermissions", account, appointee) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_IPermissionController *IPermissionControllerSession) GetAppointeePermissions(account common.Address, appointee common.Address) (*types.Transaction, error) { - return _IPermissionController.Contract.GetAppointeePermissions(&_IPermissionController.TransactOpts, account, appointee) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_IPermissionController *IPermissionControllerTransactorSession) GetAppointeePermissions(account common.Address, appointee common.Address) (*types.Transaction, error) { - return _IPermissionController.Contract.GetAppointeePermissions(&_IPermissionController.TransactOpts, account, appointee) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_IPermissionController *IPermissionControllerTransactor) GetAppointees(opts *bind.TransactOpts, account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.contract.Transact(opts, "getAppointees", account, target, selector) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_IPermissionController *IPermissionControllerSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.Contract.GetAppointees(&_IPermissionController.TransactOpts, account, target, selector) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_IPermissionController *IPermissionControllerTransactorSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _IPermissionController.Contract.GetAppointees(&_IPermissionController.TransactOpts, account, target, selector) -} - // RemoveAdmin is a paid mutator transaction binding the contract method 0x268959e5. // // Solidity: function removeAdmin(address account, address admin) returns() diff --git a/pkg/bindings/IProtocolRegistry/binding.go b/pkg/bindings/IProtocolRegistry/binding.go new file mode 100644 index 0000000000..d625e86abf --- /dev/null +++ b/pkg/bindings/IProtocolRegistry/binding.go @@ -0,0 +1,946 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IProtocolRegistry + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IProtocolRegistryTypesDeploymentConfig is an auto generated low-level Go binding around an user-defined struct. +type IProtocolRegistryTypesDeploymentConfig struct { + Pausable bool + Deprecated bool +} + +// IProtocolRegistryMetaData contains all meta data concerning the IProtocolRegistry contract. +var IProtocolRegistryMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configure\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAddress\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"names\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeployment\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pauserMultisig\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"majorVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ship\",\"inputs\":[{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"contractNames\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"totalDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DeploymentConfigured\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DeploymentShipped\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SemanticVersionUpdated\",\"inputs\":[{\"name\":\"previousSemanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false}]", +} + +// IProtocolRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use IProtocolRegistryMetaData.ABI instead. +var IProtocolRegistryABI = IProtocolRegistryMetaData.ABI + +// IProtocolRegistry is an auto generated Go binding around an Ethereum contract. +type IProtocolRegistry struct { + IProtocolRegistryCaller // Read-only binding to the contract + IProtocolRegistryTransactor // Write-only binding to the contract + IProtocolRegistryFilterer // Log filterer for contract events +} + +// IProtocolRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type IProtocolRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProtocolRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IProtocolRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProtocolRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IProtocolRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProtocolRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IProtocolRegistrySession struct { + Contract *IProtocolRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IProtocolRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IProtocolRegistryCallerSession struct { + Contract *IProtocolRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IProtocolRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IProtocolRegistryTransactorSession struct { + Contract *IProtocolRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IProtocolRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type IProtocolRegistryRaw struct { + Contract *IProtocolRegistry // Generic contract binding to access the raw methods on +} + +// IProtocolRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IProtocolRegistryCallerRaw struct { + Contract *IProtocolRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// IProtocolRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IProtocolRegistryTransactorRaw struct { + Contract *IProtocolRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIProtocolRegistry creates a new instance of IProtocolRegistry, bound to a specific deployed contract. +func NewIProtocolRegistry(address common.Address, backend bind.ContractBackend) (*IProtocolRegistry, error) { + contract, err := bindIProtocolRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IProtocolRegistry{IProtocolRegistryCaller: IProtocolRegistryCaller{contract: contract}, IProtocolRegistryTransactor: IProtocolRegistryTransactor{contract: contract}, IProtocolRegistryFilterer: IProtocolRegistryFilterer{contract: contract}}, nil +} + +// NewIProtocolRegistryCaller creates a new read-only instance of IProtocolRegistry, bound to a specific deployed contract. +func NewIProtocolRegistryCaller(address common.Address, caller bind.ContractCaller) (*IProtocolRegistryCaller, error) { + contract, err := bindIProtocolRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IProtocolRegistryCaller{contract: contract}, nil +} + +// NewIProtocolRegistryTransactor creates a new write-only instance of IProtocolRegistry, bound to a specific deployed contract. +func NewIProtocolRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*IProtocolRegistryTransactor, error) { + contract, err := bindIProtocolRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IProtocolRegistryTransactor{contract: contract}, nil +} + +// NewIProtocolRegistryFilterer creates a new log filterer instance of IProtocolRegistry, bound to a specific deployed contract. +func NewIProtocolRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*IProtocolRegistryFilterer, error) { + contract, err := bindIProtocolRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IProtocolRegistryFilterer{contract: contract}, nil +} + +// bindIProtocolRegistry binds a generic wrapper to an already deployed contract. +func bindIProtocolRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IProtocolRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IProtocolRegistry *IProtocolRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IProtocolRegistry.Contract.IProtocolRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IProtocolRegistry *IProtocolRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.IProtocolRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IProtocolRegistry *IProtocolRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.IProtocolRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IProtocolRegistry *IProtocolRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IProtocolRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IProtocolRegistry *IProtocolRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IProtocolRegistry *IProtocolRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.contract.Transact(opts, method, params...) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_IProtocolRegistry *IProtocolRegistryCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_IProtocolRegistry *IProtocolRegistrySession) PAUSERROLE() ([32]byte, error) { + return _IProtocolRegistry.Contract.PAUSERROLE(&_IProtocolRegistry.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) PAUSERROLE() ([32]byte, error) { + return _IProtocolRegistry.Contract.PAUSERROLE(&_IProtocolRegistry.CallOpts) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_IProtocolRegistry *IProtocolRegistryCaller) GetAddress(opts *bind.CallOpts, name string) (common.Address, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "getAddress", name) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_IProtocolRegistry *IProtocolRegistrySession) GetAddress(name string) (common.Address, error) { + return _IProtocolRegistry.Contract.GetAddress(&_IProtocolRegistry.CallOpts, name) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) GetAddress(name string) (common.Address, error) { + return _IProtocolRegistry.Contract.GetAddress(&_IProtocolRegistry.CallOpts, name) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_IProtocolRegistry *IProtocolRegistryCaller) GetAllDeployments(opts *bind.CallOpts) (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "getAllDeployments") + + outstruct := new(struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Names = *abi.ConvertType(out[0], new([]string)).(*[]string) + outstruct.Addresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) + outstruct.Configs = *abi.ConvertType(out[2], new([]IProtocolRegistryTypesDeploymentConfig)).(*[]IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_IProtocolRegistry *IProtocolRegistrySession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _IProtocolRegistry.Contract.GetAllDeployments(&_IProtocolRegistry.CallOpts) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _IProtocolRegistry.Contract.GetAllDeployments(&_IProtocolRegistry.CallOpts) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryCaller) GetDeployment(opts *bind.CallOpts, name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "getDeployment", name) + + outstruct := new(struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Config = *abi.ConvertType(out[1], new(IProtocolRegistryTypesDeploymentConfig)).(*IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistrySession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _IProtocolRegistry.Contract.GetDeployment(&_IProtocolRegistry.CallOpts, name) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _IProtocolRegistry.Contract.GetDeployment(&_IProtocolRegistry.CallOpts, name) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_IProtocolRegistry *IProtocolRegistryCaller) MajorVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "majorVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_IProtocolRegistry *IProtocolRegistrySession) MajorVersion() (string, error) { + return _IProtocolRegistry.Contract.MajorVersion(&_IProtocolRegistry.CallOpts) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) MajorVersion() (string, error) { + return _IProtocolRegistry.Contract.MajorVersion(&_IProtocolRegistry.CallOpts) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_IProtocolRegistry *IProtocolRegistryCaller) TotalDeployments(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "totalDeployments") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_IProtocolRegistry *IProtocolRegistrySession) TotalDeployments() (*big.Int, error) { + return _IProtocolRegistry.Contract.TotalDeployments(&_IProtocolRegistry.CallOpts) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) TotalDeployments() (*big.Int, error) { + return _IProtocolRegistry.Contract.TotalDeployments(&_IProtocolRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_IProtocolRegistry *IProtocolRegistryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _IProtocolRegistry.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_IProtocolRegistry *IProtocolRegistrySession) Version() (string, error) { + return _IProtocolRegistry.Contract.Version(&_IProtocolRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_IProtocolRegistry *IProtocolRegistryCallerSession) Version() (string, error) { + return _IProtocolRegistry.Contract.Version(&_IProtocolRegistry.CallOpts) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactor) Configure(opts *bind.TransactOpts, addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _IProtocolRegistry.contract.Transact(opts, "configure", addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_IProtocolRegistry *IProtocolRegistrySession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Configure(&_IProtocolRegistry.TransactOpts, addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactorSession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Configure(&_IProtocolRegistry.TransactOpts, addr, config) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactor) Initialize(opts *bind.TransactOpts, initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _IProtocolRegistry.contract.Transact(opts, "initialize", initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_IProtocolRegistry *IProtocolRegistrySession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Initialize(&_IProtocolRegistry.TransactOpts, initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactorSession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Initialize(&_IProtocolRegistry.TransactOpts, initialAdmin, pauserMultisig) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IProtocolRegistry *IProtocolRegistryTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IProtocolRegistry.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IProtocolRegistry *IProtocolRegistrySession) PauseAll() (*types.Transaction, error) { + return _IProtocolRegistry.Contract.PauseAll(&_IProtocolRegistry.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_IProtocolRegistry *IProtocolRegistryTransactorSession) PauseAll() (*types.Transaction, error) { + return _IProtocolRegistry.Contract.PauseAll(&_IProtocolRegistry.TransactOpts) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactor) Ship(opts *bind.TransactOpts, addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _IProtocolRegistry.contract.Transact(opts, "ship", addresses, configs, contractNames, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_IProtocolRegistry *IProtocolRegistrySession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Ship(&_IProtocolRegistry.TransactOpts, addresses, configs, contractNames, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_IProtocolRegistry *IProtocolRegistryTransactorSession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _IProtocolRegistry.Contract.Ship(&_IProtocolRegistry.TransactOpts, addresses, configs, contractNames, semanticVersion) +} + +// IProtocolRegistryDeploymentConfiguredIterator is returned from FilterDeploymentConfigured and is used to iterate over the raw logs and unpacked data for DeploymentConfigured events raised by the IProtocolRegistry contract. +type IProtocolRegistryDeploymentConfiguredIterator struct { + Event *IProtocolRegistryDeploymentConfigured // 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 *IProtocolRegistryDeploymentConfiguredIterator) 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(IProtocolRegistryDeploymentConfigured) + 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(IProtocolRegistryDeploymentConfigured) + 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 *IProtocolRegistryDeploymentConfiguredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IProtocolRegistryDeploymentConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IProtocolRegistryDeploymentConfigured represents a DeploymentConfigured event raised by the IProtocolRegistry contract. +type IProtocolRegistryDeploymentConfigured struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentConfigured is a free log retrieval operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) FilterDeploymentConfigured(opts *bind.FilterOpts, addr []common.Address) (*IProtocolRegistryDeploymentConfiguredIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _IProtocolRegistry.contract.FilterLogs(opts, "DeploymentConfigured", addrRule) + if err != nil { + return nil, err + } + return &IProtocolRegistryDeploymentConfiguredIterator{contract: _IProtocolRegistry.contract, event: "DeploymentConfigured", logs: logs, sub: sub}, nil +} + +// WatchDeploymentConfigured is a free log subscription operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) WatchDeploymentConfigured(opts *bind.WatchOpts, sink chan<- *IProtocolRegistryDeploymentConfigured, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _IProtocolRegistry.contract.WatchLogs(opts, "DeploymentConfigured", addrRule) + 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(IProtocolRegistryDeploymentConfigured) + if err := _IProtocolRegistry.contract.UnpackLog(event, "DeploymentConfigured", 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 +} + +// ParseDeploymentConfigured is a log parse operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) ParseDeploymentConfigured(log types.Log) (*IProtocolRegistryDeploymentConfigured, error) { + event := new(IProtocolRegistryDeploymentConfigured) + if err := _IProtocolRegistry.contract.UnpackLog(event, "DeploymentConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IProtocolRegistryDeploymentShippedIterator is returned from FilterDeploymentShipped and is used to iterate over the raw logs and unpacked data for DeploymentShipped events raised by the IProtocolRegistry contract. +type IProtocolRegistryDeploymentShippedIterator struct { + Event *IProtocolRegistryDeploymentShipped // 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 *IProtocolRegistryDeploymentShippedIterator) 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(IProtocolRegistryDeploymentShipped) + 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(IProtocolRegistryDeploymentShipped) + 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 *IProtocolRegistryDeploymentShippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IProtocolRegistryDeploymentShippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IProtocolRegistryDeploymentShipped represents a DeploymentShipped event raised by the IProtocolRegistry contract. +type IProtocolRegistryDeploymentShipped struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentShipped is a free log retrieval operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) FilterDeploymentShipped(opts *bind.FilterOpts, addr []common.Address) (*IProtocolRegistryDeploymentShippedIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _IProtocolRegistry.contract.FilterLogs(opts, "DeploymentShipped", addrRule) + if err != nil { + return nil, err + } + return &IProtocolRegistryDeploymentShippedIterator{contract: _IProtocolRegistry.contract, event: "DeploymentShipped", logs: logs, sub: sub}, nil +} + +// WatchDeploymentShipped is a free log subscription operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) WatchDeploymentShipped(opts *bind.WatchOpts, sink chan<- *IProtocolRegistryDeploymentShipped, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _IProtocolRegistry.contract.WatchLogs(opts, "DeploymentShipped", addrRule) + 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(IProtocolRegistryDeploymentShipped) + if err := _IProtocolRegistry.contract.UnpackLog(event, "DeploymentShipped", 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 +} + +// ParseDeploymentShipped is a log parse operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_IProtocolRegistry *IProtocolRegistryFilterer) ParseDeploymentShipped(log types.Log) (*IProtocolRegistryDeploymentShipped, error) { + event := new(IProtocolRegistryDeploymentShipped) + if err := _IProtocolRegistry.contract.UnpackLog(event, "DeploymentShipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// IProtocolRegistrySemanticVersionUpdatedIterator is returned from FilterSemanticVersionUpdated and is used to iterate over the raw logs and unpacked data for SemanticVersionUpdated events raised by the IProtocolRegistry contract. +type IProtocolRegistrySemanticVersionUpdatedIterator struct { + Event *IProtocolRegistrySemanticVersionUpdated // 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 *IProtocolRegistrySemanticVersionUpdatedIterator) 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(IProtocolRegistrySemanticVersionUpdated) + 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(IProtocolRegistrySemanticVersionUpdated) + 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 *IProtocolRegistrySemanticVersionUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *IProtocolRegistrySemanticVersionUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// IProtocolRegistrySemanticVersionUpdated represents a SemanticVersionUpdated event raised by the IProtocolRegistry contract. +type IProtocolRegistrySemanticVersionUpdated struct { + PreviousSemanticVersion string + SemanticVersion string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSemanticVersionUpdated is a free log retrieval operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_IProtocolRegistry *IProtocolRegistryFilterer) FilterSemanticVersionUpdated(opts *bind.FilterOpts) (*IProtocolRegistrySemanticVersionUpdatedIterator, error) { + + logs, sub, err := _IProtocolRegistry.contract.FilterLogs(opts, "SemanticVersionUpdated") + if err != nil { + return nil, err + } + return &IProtocolRegistrySemanticVersionUpdatedIterator{contract: _IProtocolRegistry.contract, event: "SemanticVersionUpdated", logs: logs, sub: sub}, nil +} + +// WatchSemanticVersionUpdated is a free log subscription operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_IProtocolRegistry *IProtocolRegistryFilterer) WatchSemanticVersionUpdated(opts *bind.WatchOpts, sink chan<- *IProtocolRegistrySemanticVersionUpdated) (event.Subscription, error) { + + logs, sub, err := _IProtocolRegistry.contract.WatchLogs(opts, "SemanticVersionUpdated") + 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(IProtocolRegistrySemanticVersionUpdated) + if err := _IProtocolRegistry.contract.UnpackLog(event, "SemanticVersionUpdated", 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 +} + +// ParseSemanticVersionUpdated is a log parse operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_IProtocolRegistry *IProtocolRegistryFilterer) ParseSemanticVersionUpdated(log types.Log) (*IProtocolRegistrySemanticVersionUpdated, error) { + event := new(IProtocolRegistrySemanticVersionUpdated) + if err := _IProtocolRegistry.contract.UnpackLog(event, "SemanticVersionUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/IProxyAdmin/binding.go b/pkg/bindings/IProxyAdmin/binding.go new file mode 100644 index 0000000000..0c0906cc59 --- /dev/null +++ b/pkg/bindings/IProxyAdmin/binding.go @@ -0,0 +1,306 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package IProxyAdmin + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IProxyAdminMetaData contains all meta data concerning the IProxyAdmin contract. +var IProxyAdminMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"changeProxyAdmin\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"newAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getProxyAdmin\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getProxyImplementation\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"upgradeAndCall\",\"inputs\":[{\"name\":\"proxy\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"implementation\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"data\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"payable\"}]", +} + +// IProxyAdminABI is the input ABI used to generate the binding from. +// Deprecated: Use IProxyAdminMetaData.ABI instead. +var IProxyAdminABI = IProxyAdminMetaData.ABI + +// IProxyAdmin is an auto generated Go binding around an Ethereum contract. +type IProxyAdmin struct { + IProxyAdminCaller // Read-only binding to the contract + IProxyAdminTransactor // Write-only binding to the contract + IProxyAdminFilterer // Log filterer for contract events +} + +// IProxyAdminCaller is an auto generated read-only Go binding around an Ethereum contract. +type IProxyAdminCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProxyAdminTransactor is an auto generated write-only Go binding around an Ethereum contract. +type IProxyAdminTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProxyAdminFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type IProxyAdminFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// IProxyAdminSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type IProxyAdminSession struct { + Contract *IProxyAdmin // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IProxyAdminCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type IProxyAdminCallerSession struct { + Contract *IProxyAdminCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// IProxyAdminTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type IProxyAdminTransactorSession struct { + Contract *IProxyAdminTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// IProxyAdminRaw is an auto generated low-level Go binding around an Ethereum contract. +type IProxyAdminRaw struct { + Contract *IProxyAdmin // Generic contract binding to access the raw methods on +} + +// IProxyAdminCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type IProxyAdminCallerRaw struct { + Contract *IProxyAdminCaller // Generic read-only contract binding to access the raw methods on +} + +// IProxyAdminTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type IProxyAdminTransactorRaw struct { + Contract *IProxyAdminTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewIProxyAdmin creates a new instance of IProxyAdmin, bound to a specific deployed contract. +func NewIProxyAdmin(address common.Address, backend bind.ContractBackend) (*IProxyAdmin, error) { + contract, err := bindIProxyAdmin(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &IProxyAdmin{IProxyAdminCaller: IProxyAdminCaller{contract: contract}, IProxyAdminTransactor: IProxyAdminTransactor{contract: contract}, IProxyAdminFilterer: IProxyAdminFilterer{contract: contract}}, nil +} + +// NewIProxyAdminCaller creates a new read-only instance of IProxyAdmin, bound to a specific deployed contract. +func NewIProxyAdminCaller(address common.Address, caller bind.ContractCaller) (*IProxyAdminCaller, error) { + contract, err := bindIProxyAdmin(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &IProxyAdminCaller{contract: contract}, nil +} + +// NewIProxyAdminTransactor creates a new write-only instance of IProxyAdmin, bound to a specific deployed contract. +func NewIProxyAdminTransactor(address common.Address, transactor bind.ContractTransactor) (*IProxyAdminTransactor, error) { + contract, err := bindIProxyAdmin(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &IProxyAdminTransactor{contract: contract}, nil +} + +// NewIProxyAdminFilterer creates a new log filterer instance of IProxyAdmin, bound to a specific deployed contract. +func NewIProxyAdminFilterer(address common.Address, filterer bind.ContractFilterer) (*IProxyAdminFilterer, error) { + contract, err := bindIProxyAdmin(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &IProxyAdminFilterer{contract: contract}, nil +} + +// bindIProxyAdmin binds a generic wrapper to an already deployed contract. +func bindIProxyAdmin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := IProxyAdminMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IProxyAdmin *IProxyAdminRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IProxyAdmin.Contract.IProxyAdminCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IProxyAdmin *IProxyAdminRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IProxyAdmin.Contract.IProxyAdminTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IProxyAdmin *IProxyAdminRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IProxyAdmin.Contract.IProxyAdminTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_IProxyAdmin *IProxyAdminCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _IProxyAdmin.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_IProxyAdmin *IProxyAdminTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _IProxyAdmin.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_IProxyAdmin *IProxyAdminTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _IProxyAdmin.Contract.contract.Transact(opts, method, params...) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminCaller) GetProxyAdmin(opts *bind.CallOpts, proxy common.Address) (common.Address, error) { + var out []interface{} + err := _IProxyAdmin.contract.Call(opts, &out, "getProxyAdmin", proxy) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminSession) GetProxyAdmin(proxy common.Address) (common.Address, error) { + return _IProxyAdmin.Contract.GetProxyAdmin(&_IProxyAdmin.CallOpts, proxy) +} + +// GetProxyAdmin is a free data retrieval call binding the contract method 0xf3b7dead. +// +// Solidity: function getProxyAdmin(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminCallerSession) GetProxyAdmin(proxy common.Address) (common.Address, error) { + return _IProxyAdmin.Contract.GetProxyAdmin(&_IProxyAdmin.CallOpts, proxy) +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminCaller) GetProxyImplementation(opts *bind.CallOpts, proxy common.Address) (common.Address, error) { + var out []interface{} + err := _IProxyAdmin.contract.Call(opts, &out, "getProxyImplementation", proxy) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminSession) GetProxyImplementation(proxy common.Address) (common.Address, error) { + return _IProxyAdmin.Contract.GetProxyImplementation(&_IProxyAdmin.CallOpts, proxy) +} + +// GetProxyImplementation is a free data retrieval call binding the contract method 0x204e1c7a. +// +// Solidity: function getProxyImplementation(address proxy) view returns(address) +func (_IProxyAdmin *IProxyAdminCallerSession) GetProxyImplementation(proxy common.Address) (common.Address, error) { + return _IProxyAdmin.Contract.GetProxyImplementation(&_IProxyAdmin.CallOpts, proxy) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_IProxyAdmin *IProxyAdminTransactor) ChangeProxyAdmin(opts *bind.TransactOpts, proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _IProxyAdmin.contract.Transact(opts, "changeProxyAdmin", proxy, newAdmin) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_IProxyAdmin *IProxyAdminSession) ChangeProxyAdmin(proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _IProxyAdmin.Contract.ChangeProxyAdmin(&_IProxyAdmin.TransactOpts, proxy, newAdmin) +} + +// ChangeProxyAdmin is a paid mutator transaction binding the contract method 0x7eff275e. +// +// Solidity: function changeProxyAdmin(address proxy, address newAdmin) returns() +func (_IProxyAdmin *IProxyAdminTransactorSession) ChangeProxyAdmin(proxy common.Address, newAdmin common.Address) (*types.Transaction, error) { + return _IProxyAdmin.Contract.ChangeProxyAdmin(&_IProxyAdmin.TransactOpts, proxy, newAdmin) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_IProxyAdmin *IProxyAdminTransactor) Upgrade(opts *bind.TransactOpts, proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _IProxyAdmin.contract.Transact(opts, "upgrade", proxy, implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_IProxyAdmin *IProxyAdminSession) Upgrade(proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _IProxyAdmin.Contract.Upgrade(&_IProxyAdmin.TransactOpts, proxy, implementation) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x99a88ec4. +// +// Solidity: function upgrade(address proxy, address implementation) returns() +func (_IProxyAdmin *IProxyAdminTransactorSession) Upgrade(proxy common.Address, implementation common.Address) (*types.Transaction, error) { + return _IProxyAdmin.Contract.Upgrade(&_IProxyAdmin.TransactOpts, proxy, implementation) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_IProxyAdmin *IProxyAdminTransactor) UpgradeAndCall(opts *bind.TransactOpts, proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _IProxyAdmin.contract.Transact(opts, "upgradeAndCall", proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_IProxyAdmin *IProxyAdminSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _IProxyAdmin.Contract.UpgradeAndCall(&_IProxyAdmin.TransactOpts, proxy, implementation, data) +} + +// UpgradeAndCall is a paid mutator transaction binding the contract method 0x9623609d. +// +// Solidity: function upgradeAndCall(address proxy, address implementation, bytes data) payable returns() +func (_IProxyAdmin *IProxyAdminTransactorSession) UpgradeAndCall(proxy common.Address, implementation common.Address, data []byte) (*types.Transaction, error) { + return _IProxyAdmin.Contract.UpgradeAndCall(&_IProxyAdmin.TransactOpts, proxy, implementation, data) +} diff --git a/pkg/bindings/IRewardsCoordinator/binding.go b/pkg/bindings/IRewardsCoordinator/binding.go index b9fa75ba56..10d1609381 100644 --- a/pkg/bindings/IRewardsCoordinator/binding.go +++ b/pkg/bindings/IRewardsCoordinator/binding.go @@ -99,7 +99,7 @@ type OperatorSet struct { // IRewardsCoordinatorMetaData contains all meta data concerning the IRewardsCoordinator contract. var IRewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // IRewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -930,37 +930,6 @@ func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) RewardsUpdater() ( return _IRewardsCoordinator.Contract.RewardsUpdater(&_IRewardsCoordinator.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IRewardsCoordinator *IRewardsCoordinatorCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IRewardsCoordinator.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IRewardsCoordinator *IRewardsCoordinatorSession) Version() (string, error) { - return _IRewardsCoordinator.Contract.Version(&_IRewardsCoordinator.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IRewardsCoordinator *IRewardsCoordinatorCallerSession) Version() (string, error) { - return _IRewardsCoordinator.Contract.Version(&_IRewardsCoordinator.CallOpts) -} - // CreateAVSRewardsSubmission is a paid mutator transaction binding the contract method 0xfce36c7d. // // Solidity: function createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() diff --git a/pkg/bindings/ISignatureUtilsMixin/binding.go b/pkg/bindings/ISignatureUtilsMixin/binding.go index cbc7b8eb11..e9e930500a 100644 --- a/pkg/bindings/ISignatureUtilsMixin/binding.go +++ b/pkg/bindings/ISignatureUtilsMixin/binding.go @@ -31,7 +31,7 @@ var ( // ISignatureUtilsMixinMetaData contains all meta data concerning the ISignatureUtilsMixin contract. var ISignatureUtilsMixinMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]}]", } // ISignatureUtilsMixinABI is the input ABI used to generate the binding from. @@ -210,34 +210,3 @@ func (_ISignatureUtilsMixin *ISignatureUtilsMixinSession) DomainSeparator() ([32 func (_ISignatureUtilsMixin *ISignatureUtilsMixinCallerSession) DomainSeparator() ([32]byte, error) { return _ISignatureUtilsMixin.Contract.DomainSeparator(&_ISignatureUtilsMixin.CallOpts) } - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISignatureUtilsMixin *ISignatureUtilsMixinCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ISignatureUtilsMixin.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISignatureUtilsMixin *ISignatureUtilsMixinSession) Version() (string, error) { - return _ISignatureUtilsMixin.Contract.Version(&_ISignatureUtilsMixin.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ISignatureUtilsMixin *ISignatureUtilsMixinCallerSession) Version() (string, error) { - return _ISignatureUtilsMixin.Contract.Version(&_ISignatureUtilsMixin.CallOpts) -} diff --git a/pkg/bindings/IStrategy/binding.go b/pkg/bindings/IStrategy/binding.go index 532ed8f2d3..a4c7ac4cb1 100644 --- a/pkg/bindings/IStrategy/binding.go +++ b/pkg/bindings/IStrategy/binding.go @@ -31,7 +31,7 @@ var ( // IStrategyMetaData contains all meta data concerning the IStrategy contract. var IStrategyMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", } // IStrategyABI is the input ABI used to generate the binding from. @@ -397,37 +397,6 @@ func (_IStrategy *IStrategyCallerSession) UserUnderlyingView(user common.Address return _IStrategy.Contract.UserUnderlyingView(&_IStrategy.CallOpts, user) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategy *IStrategyCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IStrategy.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategy *IStrategySession) Version() (string, error) { - return _IStrategy.Contract.Version(&_IStrategy.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategy *IStrategyCallerSession) Version() (string, error) { - return _IStrategy.Contract.Version(&_IStrategy.CallOpts) -} - // Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. // // Solidity: function deposit(address token, uint256 amount) returns(uint256) diff --git a/pkg/bindings/IStrategyFactory/binding.go b/pkg/bindings/IStrategyFactory/binding.go index f550d36dc8..47fe1eac8f 100644 --- a/pkg/bindings/IStrategyFactory/binding.go +++ b/pkg/bindings/IStrategyFactory/binding.go @@ -31,7 +31,7 @@ var ( // IStrategyFactoryMetaData contains all meta data concerning the IStrategyFactory contract. var IStrategyFactoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", } // IStrategyFactoryABI is the input ABI used to generate the binding from. @@ -242,37 +242,6 @@ func (_IStrategyFactory *IStrategyFactoryCallerSession) StrategyBeacon() (common return _IStrategyFactory.Contract.StrategyBeacon(&_IStrategyFactory.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyFactory *IStrategyFactoryCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IStrategyFactory.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyFactory *IStrategyFactorySession) Version() (string, error) { - return _IStrategyFactory.Contract.Version(&_IStrategyFactory.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyFactory *IStrategyFactoryCallerSession) Version() (string, error) { - return _IStrategyFactory.Contract.Version(&_IStrategyFactory.CallOpts) -} - // DeployNewStrategy is a paid mutator transaction binding the contract method 0x6b9b6229. // // Solidity: function deployNewStrategy(address token) returns(address newStrategy) diff --git a/pkg/bindings/IStrategyManager/binding.go b/pkg/bindings/IStrategyManager/binding.go index d6c5a138ff..e18585c1f6 100644 --- a/pkg/bindings/IStrategyManager/binding.go +++ b/pkg/bindings/IStrategyManager/binding.go @@ -37,7 +37,7 @@ type OperatorSet struct { // IStrategyManagerMetaData contains all meta data concerning the IStrategyManager contract. var IStrategyManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]}]", } // IStrategyManagerABI is the input ABI used to generate the binding from. @@ -654,37 +654,6 @@ func (_IStrategyManager *IStrategyManagerCallerSession) StrategyWhitelister() (c return _IStrategyManager.Contract.StrategyWhitelister(&_IStrategyManager.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyManager *IStrategyManagerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _IStrategyManager.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyManager *IStrategyManagerSession) Version() (string, error) { - return _IStrategyManager.Contract.Version(&_IStrategyManager.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_IStrategyManager *IStrategyManagerCallerSession) Version() (string, error) { - return _IStrategyManager.Contract.Version(&_IStrategyManager.CallOpts) -} - // AddShares is a paid mutator transaction binding the contract method 0x50ff7225. // // Solidity: function addShares(address staker, address strategy, uint256 shares) returns(uint256, uint256) diff --git a/pkg/bindings/KeyRegistrar/binding.go b/pkg/bindings/KeyRegistrar/binding.go index 7f1e9a785b..09c1d98832 100644 --- a/pkg/bindings/KeyRegistrar/binding.go +++ b/pkg/bindings/KeyRegistrar/binding.go @@ -49,8 +49,8 @@ type OperatorSet struct { // KeyRegistrarMetaData contains all meta data concerning the KeyRegistrar contract. var KeyRegistrarMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BN254_KEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ECDSA_KEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161314a38038061314a83398101604081905261002e916100cb565b6001600160a01b03808316608052831660a052808061004c8161005a565b60c052506101fc9350505050565b5f5f829050601f8151111561008d578260405163305a27a960e01b815260040161008491906101a1565b60405180910390fd5b8051610098826101d6565b179392505050565b6001600160a01b03811681146100b4575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156100dd575f5ffd5b83516100e8816100a0565b60208501519093506100f9816100a0565b60408501519092506001600160401b03811115610114575f5ffd5b8401601f81018613610124575f5ffd5b80516001600160401b0381111561013d5761013d6100b7565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016b5761016b6100b7565b604052818152828201602001881015610182575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156101f6575f198160200360031b1b821691505b50919050565b60805160a05160c051612f0f61023b5f395f81816103fa01526116f001525f8181610195015261129f01525f818161033b015261061d0152612f0f5ff3fe608060405234801561000f575f5ffd5b5060043610610127575f3560e01c8063aa165c30116100a9578063d9f12db21161006e578063d9f12db214610370578063dab42d7e14610383578063ea0d8149146103a5578063ea194e2e146103b8578063f698da25146103cb575f5ffd5b8063aa165c30146102d9578063b05c8f6d146102ec578063bd30a0b914610313578063ca8aa7c714610336578063d40cda161461035d575f5ffd5b80637690e395116100ef5780637690e3951461023e5780637cffe48c146102515780638256909c1461027157806387ab86f4146102a35780639a43e3fb146102b8575f5ffd5b8063166aa1271461012b5780633b32a7bd146101655780634657e26a1461019057806350435add146101b757806354fd4d5014610236575b5f5ffd5b6101527f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f8181565b6040519081526020015b60405180910390f35b61017861017336600461259c565b6103d3565b6040516001600160a01b03909116815260200161015c565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6102296101c536600461261d565b8151602080840151835180519083015185840151805190850151604080519687019790975295850193909352606084810192909252608084015260a083019190915260c082019290925260e001604051602081830303815290604052905092915050565b60405161015c91906126c8565b6102296103f3565b61015261024c366004612718565b610423565b61026461025f366004612776565b6104cb565b60405161015c91906127c4565b61028461027f3660046127d2565b6104f1565b604080516001600160a01b03909316835290151560208301520161015c565b6102b66102b1366004612878565b6105df565b005b6102cb6102c636600461259c565b6108f0565b60405161015c9291906128c3565b6102296102e736600461259c565b610ad8565b6101527fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8181565b61032661032136600461259c565b610c15565b604051901515815260200161015c565b6101787f000000000000000000000000000000000000000000000000000000000000000081565b6102b661036b366004612900565b610c52565b61015261037e366004612991565b610dc3565b6103266103913660046129d2565b5f9081526002602052604090205460ff1690565b6102b66103b33660046129e9565b610e5c565b6101526103c636600461259c565b610f9f565b6101526110c7565b5f6103de8383610ad8565b6103e790612a22565b60601c90505b92915050565b606061041e7f0000000000000000000000000000000000000000000000000000000000000000611180565b905090565b5f5f7fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8186865f015187602001518787604051610460929190612a7a565b6040805191829003822060208301969096526001600160a01b039485169082015292909116606083015263ffffffff16608082015260a081019190915260c0016040516020818303038152906040528051906020012090506104c1816111bd565b9695505050505050565b5f60015f6104d884611203565b815260208101919091526040015f205460ff1692915050565b5f5f5f60015f61050087611203565b815260208101919091526040015f9081205460ff169150600182600281111561052b5761052b612790565b0361053d5750835160208501206105ae565b600282600281111561055157610551612790565b03610595575f5f8680602001905181019061056c9190612a89565b60408051808201825283815260209081019283525f9384529151909152902092506105ae915050565b60405163fdea7c0960e01b815260040160405180910390fd5b5f818152600360205260409020546001600160a01b0316806105d08882610c15565b945094505050505b9250929050565b816105e981611261565b6106065760405163932d94f760e01b815260040160405180910390fd5b6040516309a961f360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631352c3e6906106549086908690600401612aab565b602060405180830381865afa15801561066f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106939190612ae1565b15828490916106e057604051631070287960e01b815282516001600160a01b03908116600483015260209093015163ffffffff166024820152911660448201526064015b60405180910390fd5b50505f60015f6106ef85611203565b815260208101919091526040015f9081205460ff16915081600281111561071857610718612790565b0361073657604051635cd3106d60e11b815260040160405180910390fd5b5f5f5f61074286611203565b815260208082019290925260409081015f9081206001600160a01b038916825283528190208151808301909252805460ff1615158252600181018054929391929184019161078f90612b00565b80601f01602080910402602001604051908101604052809291908181526020018280546107bb90612b00565b80156108065780601f106107dd57610100808354040283529160200191610806565b820191905f5260205f20905b8154815290600101906020018083116107e957829003601f168201915b5050505050815250509050805f01518486909161085c57604051632e40e18760e01b815282516001600160a01b03908116600483015260209093015163ffffffff166024820152911660448201526064016106d7565b50505f5f61086986611203565b815260208082019290925260409081015f9081206001600160a01b03891682529092528120805460ff19168155906108a460018301826123a1565b5050846001600160a01b03167f28d3c3cee49478ec6fd219cfd685cd15cd01d95cabf69b4b7b57f9eaa3eb644285846040516108e1929190612b38565b60405180910390a25050505050565b604080518082019091525f808252602082015261090b6123db565b5f60015f61091887611203565b815260208101919091526040015f205460ff169050600281600281111561094157610941612790565b1461095f5760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f61096b88611203565b815260208082019290925260409081015f9081206001600160a01b038916825283528190208151808301909252805460ff161515825260018101805492939192918401916109b890612b00565b80601f01602080910402602001604051908101604052809291908181526020018280546109e490612b00565b8015610a2f5780601f10610a0657610100808354040283529160200191610a2f565b820191905f5260205f20905b815481529060010190602001808311610a1257829003601f168201915b5050505050815250509050805f0151610a845750506040805180820182525f808252602080830182905283518085018552828152808201929092528351808501909452828452830191909152925090506105d8565b5f5f5f5f8460200151806020019051810190610aa09190612baa565b604080518082018252948552602080860194909452805180820190915291825291810191909152909b909a5098505050505050505050565b60605f60015f610ae786611203565b815260208101919091526040015f205460ff1690506001816002811115610b1057610b10612790565b14610b2e5760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f610b3a87611203565b815260208082019290925260409081015f9081206001600160a01b038816825283528190208151808301909252805460ff16151582526001810180549293919291840191610b8790612b00565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb390612b00565b8015610bfe5780601f10610bd557610100808354040283529160200191610bfe565b820191905f5260205f20905b815481529060010190602001808311610be157829003601f168201915b505050919092525050506020015195945050505050565b5f5f5f610c2185611203565b815260208082019290925260409081015f9081206001600160a01b038616825290925290205460ff16905092915050565b85610c5c81611261565b610c795760405163932d94f760e01b815260040160405180910390fd5b5f60015f610c8689611203565b815260208101919091526040015f9081205460ff169150816002811115610caf57610caf612790565b03610ccd57604051635cd3106d60e11b815260040160405180910390fd5b5f5f610cd889611203565b815260208082019290925260409081015f9081206001600160a01b038c16825290925290205460ff1615610d1f576040516342ee68b560e01b815260040160405180910390fd5b6001816002811115610d3357610d33612790565b03610d4b57610d4687898888888861130b565b610d72565b6002816002811115610d5f57610d5f612790565b0361059557610d4687898888888861146c565b876001600160a01b03167f1201ce0c5e577111bce91e907fd99cb183da5edc1e3fb650ca40769e4e9176dd88838989604051610db19493929190612bf0565b60405180910390a25050505050505050565b81516020808401516040515f938493610e30937f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f81938a93928991019485526001600160a01b039384166020860152918316604085015263ffffffff16606084015216608082015260a00190565b604051602081830303815290604052805190602001209050610e51816111bd565b9150505b9392505050565b8151610e6781611261565b610e845760405163932d94f760e01b815260040160405180910390fd5b6001826002811115610e9857610e98612790565b1480610eb557506002826002811115610eb357610eb3612790565b145b610ed25760405163fdea7c0960e01b815260040160405180910390fd5b5f60015f610edf86611203565b815260208101919091526040015f9081205460ff169150816002811115610f0857610f08612790565b14610f25576040516281f09f60e01b815260040160405180910390fd5b8260015f610f3287611203565b815260208101919091526040015f20805460ff19166001836002811115610f5b57610f5b612790565b02179055507fb2266cb118e57095fcdbedb24dabd9fc9f5127e2dbedf62ce6ee71696fb8b6e78484604051610f91929190612b38565b60405180910390a150505050565b5f5f5f5f610fac86611203565b815260208082019290925260409081015f9081206001600160a01b038716825283528190208151808301909252805460ff16151582526001810180549293919291840191610ff990612b00565b80601f016020809104026020016040519081016040528092919081815260200182805461102590612b00565b80156110705780601f1061104757610100808354040283529160200191611070565b820191905f5260205f20905b81548152906001019060200180831161105357829003601f168201915b50505050508152505090505f60015f61108887611203565b815260208101919091526040015f2054825160ff90911691506110b057505f91506103ed9050565b6110be826020015182611667565b95945050505050565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6111346116e8565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60605f61118c8361175d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6111c66110c7565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f815f0151826020015163ffffffff1660405160200161124992919060609290921b6001600160601b031916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526103ed90612c4d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156112e7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ed9190612ae1565b6014831461132c5760405163d109118160e01b815260040160405180910390fd5b5f6113378486612c70565b60601c90508061135a57604051634935505f60e01b815260040160405180910390fd5b5f61139c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060019250611667915050565b5f8181526002602052604090205490915060ff16156113ce57604051630c7bc20160e11b815260040160405180910390fd5b5f6113da888a85610dc3565b905061141f838287878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505f199250611784915050565b611461898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508892506117dc915050565b505050505050505050565b60c0831461148d5760405163d109118160e01b815260040160405180910390fd5b604081146114ae57604051638baa579f60e01b815260040160405180910390fd5b604080518082019091525f80825260208201526114c96123db565b5f8080806114d9898b018b612cae565b93509350935093506040518060400160405280858152602001848152509550835f148015611505575082155b1561152357604051634935505f60e01b815260040160405180910390fd5b60408051808201909152918252602082015292505f91506115489050888a8989610423565b90505f8061155886880188612ce8565b604080518082019091528281526020810182905291935091505f611580858389898580611889565b915050806115a157604051638baa579f60e01b815260040160405180910390fd5b5f6115e38c8c8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060029250611667915050565b5f8181526002602052604090205490915060ff161561161557604051630c7bc20160e11b815260040160405180910390fd5b6116578e8e8e8e8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508792506117dc915050565b5050505050505050505050505050565b5f600182600281111561167c5761167c612790565b0361168e5750815160208301206103ed565b60028260028111156116a2576116a2612790565b03610595575f5f848060200190518101906116bd9190612baa565b505060408051808201825283815260209081019283525f9384529151909152902092506103ed915050565b60605f6117147f0000000000000000000000000000000000000000000000000000000000000000611180565b9050805f8151811061172857611728612a66565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f60ff8216601f8111156103ed57604051632cd44ac360e21b815260040160405180910390fd5b428110156117a557604051630819bdcd60e01b815260040160405180910390fd5b6117b96001600160a01b0385168484611951565b6117d657604051638baa579f60e01b815260040160405180910390fd5b50505050565b6040805180820190915260018152602081018390525f806117fc87611203565b815260208082019290925260409081015f9081206001600160a01b03881682528352208251815460ff19169015151781559082015160018201906118409082612d54565b5050505f908152600260209081526040808320805460ff191660011790556003909152902080546001600160a01b039093166001600160a01b0319909316929092179091555050565b5f5f5f611895896119a5565b90505f6118a48a89898c611a2f565b90505f6118bb6118b48a84611ada565b8b90611b4a565b90505f6118fd6118f6846118f06040805180820182525f80825260209182015281518083019092526001825260029082015290565b90611ada565b8590611b4a565b905087156119225761191982611911611bbe565b838c8b611c7e565b96509450611942565b6119358261192e611bbe565b838c611e92565b9550851561194257600194505b50505050965096945050505050565b5f5f5f61195e85856120c9565b90925090505f81600481111561197657611976612790565b1480156119945750856001600160a01b0316826001600160a01b0316145b806104c157506104c1868686612108565b604080518082019091525f80825260208201525f80806119d25f516020612eba5f395f51905f5286612e0f565b90505b6119de816121ef565b90935091505f516020612eba5f395f51905f528283098303611a16576040805180820190915290815260208101919091529392505050565b5f516020612eba5f395f51905f526001820890506119d5565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c6110be9190612e0f565b604080518082019091525f8082526020820152611af5612400565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa90508080611b2357fe5b5080611b4257604051632319df1960e11b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152611b6561241e565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa90508080611b9f57fe5b5080611b425760405163d4b68fd760e01b815260040160405180910390fd5b611bc66123db565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f91829190611caf61243c565b5f5b6002811015611e66575f611cc6826006612e42565b9050848260028110611cda57611cda612a66565b60200201515183611ceb835f612e59565b600c8110611cfb57611cfb612a66565b6020020152848260028110611d1257611d12612a66565b60200201516020015183826001611d299190612e59565b600c8110611d3957611d39612a66565b6020020152838260028110611d5057611d50612a66565b6020020151515183611d63836002612e59565b600c8110611d7357611d73612a66565b6020020152838260028110611d8a57611d8a612a66565b6020020151516001602002015183611da3836003612e59565b600c8110611db357611db3612a66565b6020020152838260028110611dca57611dca612a66565b6020020151602001515f60028110611de457611de4612a66565b602002015183611df5836004612e59565b600c8110611e0557611e05612a66565b6020020152838260028110611e1c57611e1c612a66565b602002015160200151600160028110611e3757611e37612a66565b602002015183611e48836005612e59565b600c8110611e5857611e58612a66565b602002015250600101611cb1565b50611e6f61245b565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f91611ec061243c565b5f5b6002811015612077575f611ed7826006612e42565b9050848260028110611eeb57611eeb612a66565b60200201515183611efc835f612e59565b600c8110611f0c57611f0c612a66565b6020020152848260028110611f2357611f23612a66565b60200201516020015183826001611f3a9190612e59565b600c8110611f4a57611f4a612a66565b6020020152838260028110611f6157611f61612a66565b6020020151515183611f74836002612e59565b600c8110611f8457611f84612a66565b6020020152838260028110611f9b57611f9b612a66565b6020020151516001602002015183611fb4836003612e59565b600c8110611fc457611fc4612a66565b6020020152838260028110611fdb57611fdb612a66565b6020020151602001515f60028110611ff557611ff5612a66565b602002015183612006836004612e59565b600c811061201657612016612a66565b602002015283826002811061202d5761202d612a66565b60200201516020015160016002811061204857612048612a66565b602002015183612059836005612e59565b600c811061206957612069612a66565b602002015250600101611ec2565b5061208061245b565b5f6020826101808560086107d05a03fa9050808061209a57fe5b50806120b9576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f5f82516041036120fd576020830151604084015160608501515f1a6120f18782858561226b565b945094505050506105d8565b505f905060026105d8565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612130929190612e6c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252905161216e9190612e8c565b5f60405180830381855afa9150503d805f81146121a6576040519150601f19603f3d011682016040523d82523d5f602084013e6121ab565b606091505b50915091508180156121bf57506020815110155b80156104c157508051630b135d3f60e11b906121e49083016020908101908401612ea2565b149695505050505050565b5f80805f516020612eba5f395f51905f5260035f516020612eba5f395f51905f52865f516020612eba5f395f51905f52888909090890505f61225f827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f516020612eba5f395f51905f52612328565b91959194509092505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156122a057505f9050600361231f565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156122f1573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612319575f6001925092505061231f565b91505f90505b94509492505050565b5f5f61233261245b565b61233a612479565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa9250828061237757fe5b50826123965760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b5080546123ad90612b00565b5f825580601f106123bc575050565b601f0160209004905f5260205f20908101906123d89190612497565b50565b60405180604001604052806123ee6124af565b81526020016123fb6124af565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b808211156124ab575f8155600101612498565b5090565b60405180604001604052806002906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff81118282101715612504576125046124cd565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715612533576125336124cd565b604052919050565b80356001600160a01b0381168114612551575f5ffd5b919050565b5f60408284031215612566575f5ffd5b61256e6124e1565b90506125798261253b565b8152602082013563ffffffff81168114612591575f5ffd5b602082015292915050565b5f5f606083850312156125ad575f5ffd5b6125b78484612556565b91506125c56040840161253b565b90509250929050565b5f82601f8301126125dd575f5ffd5b6125e7604061250a565b8060408401858111156125f8575f5ffd5b845b818110156126125780358452602093840193016125fa565b509095945050505050565b5f5f82840360c081121561262f575f5ffd5b604081121561263c575f5ffd5b6126446124e1565b843581526020808601359082015292506080603f1982011215612665575f5ffd5b5061266e6124e1565b61267b85604086016125ce565b815261268a85608086016125ce565b6020820152809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610e55602083018461269a565b5f5f83601f8401126126ea575f5ffd5b50813567ffffffffffffffff811115612701575f5ffd5b6020830191508360208285010111156105d8575f5ffd5b5f5f5f5f6080858703121561272b575f5ffd5b6127348561253b565b93506127438660208701612556565b9250606085013567ffffffffffffffff81111561275e575f5ffd5b61276a878288016126da565b95989497509550505050565b5f60408284031215612786575f5ffd5b610e558383612556565b634e487b7160e01b5f52602160045260245ffd5b600381106127c057634e487b7160e01b5f52602160045260245ffd5b9052565b602081016103ed82846127a4565b5f5f606083850312156127e3575f5ffd5b6127ed8484612556565b9150604083013567ffffffffffffffff811115612808575f5ffd5b8301601f81018513612818575f5ffd5b803567ffffffffffffffff811115612832576128326124cd565b612845601f8201601f191660200161250a565b818152866020838501011115612859575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f60608385031215612889575f5ffd5b6128928361253b565b91506125c58460208501612556565b805f5b60028110156117d65781518452602093840193909101906001016128a4565b5f60c08201905083518252602084015160208301526128e66040830184516128a1565b60208301516128f860808401826128a1565b509392505050565b5f5f5f5f5f5f60a08789031215612915575f5ffd5b61291e8761253b565b955061292d8860208901612556565b9450606087013567ffffffffffffffff811115612948575f5ffd5b61295489828a016126da565b909550935050608087013567ffffffffffffffff811115612973575f5ffd5b61297f89828a016126da565b979a9699509497509295939492505050565b5f5f5f608084860312156129a3575f5ffd5b6129ac8461253b565b92506129bb8560208601612556565b91506129c96060850161253b565b90509250925092565b5f602082840312156129e2575f5ffd5b5035919050565b5f5f606083850312156129fa575f5ffd5b612a048484612556565b9150604083013560038110612a17575f5ffd5b809150509250929050565b805160208201516001600160601b0319811691906014821015612a5f576001600160601b03196001600160601b03198360140360031b1b82161692505b5050919050565b634e487b7160e01b5f52603260045260245ffd5b818382375f9101908152919050565b5f5f60408385031215612a9a575f5ffd5b505080516020909101519092909150565b6001600160a01b038316815260608101610e55602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f60208284031215612af1575f5ffd5b81518015158114610e55575f5ffd5b600181811c90821680612b1457607f821691505b602082108103612b3257634e487b7160e01b5f52602260045260245ffd5b50919050565b82516001600160a01b0316815260208084015163ffffffff169082015260608101610e5560408301846127a4565b5f82601f830112612b75575f5ffd5b612b7f604061250a565b806040840185811115612b90575f5ffd5b845b81811015612612578051845260209384019301612b92565b5f5f5f5f60c08587031215612bbd575f5ffd5b845160208601519094509250612bd68660408701612b66565b9150612be58660808701612b66565b905092959194509250565b84516001600160a01b0316815260208086015163ffffffff1690820152612c1a60408201856127a4565b60806060820152816080820152818360a08301375f81830160a090810191909152601f909201601f191601019392505050565b80516020808301519190811015612b32575f1960209190910360031b1b16919050565b80356001600160601b03198116906014841015612ca7576001600160601b03196001600160601b03198560140360031b1b82161691505b5092915050565b5f5f5f5f60c08587031215612cc1575f5ffd5b8435935060208501359250612cd986604087016125ce565b9150612be586608087016125ce565b5f5f60408385031215612cf9575f5ffd5b50508035926020909101359150565b601f821115612d4f57805f5260205f20601f840160051c81016020851015612d2d5750805b601f840160051c820191505b81811015612d4c575f8155600101612d39565b50505b505050565b815167ffffffffffffffff811115612d6e57612d6e6124cd565b612d8281612d7c8454612b00565b84612d08565b6020601f821160018114612db4575f8315612d9d5750848201515b5f19600385901b1c1916600184901b178455612d4c565b5f84815260208120601f198516915b82811015612de35787850151825560209485019460019092019101612dc3565b5084821015612e0057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b5f82612e2957634e487b7160e01b5f52601260045260245ffd5b500690565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176103ed576103ed612e2e565b808201808211156103ed576103ed612e2e565b828152604060208201525f612e84604083018461269a565b949350505050565b5f82518060208501845e5f920191825250919050565b5f60208284031215612eb2575f5ffd5b505191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a26469706673582212201df3a560128f27a0612f2f095e7e575dd271a835148632603757c72234c7b14364736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BN254_KEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ECDSA_KEY_REGISTRATION_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"configureOperatorSetWithMinDelay\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"minDelaySeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"finalizeScheduledRotation\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"success\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rotateKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newPubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinKeyRotationDelay\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"minDelaySeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRotationScheduled\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"oldPubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"newPubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"activateAt\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MinKeyRotationDelaySet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"minDelay\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECAddFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECMulFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ECPairingFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExpModFailed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"PendingRotationExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RotationDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b50604051613bd7380380613bd783398101604081905261002e916100cb565b6001600160a01b03808316608052831660a052808061004c8161005a565b60c052506101fc9350505050565b5f5f829050601f8151111561008d578260405163305a27a960e01b815260040161008491906101a1565b60405180910390fd5b8051610098826101d6565b179392505050565b6001600160a01b03811681146100b4575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156100dd575f5ffd5b83516100e8816100a0565b60208501519093506100f9816100a0565b60408501519092506001600160401b03811115610114575f5ffd5b8401601f81018613610124575f5ffd5b80516001600160401b0381111561013d5761013d6100b7565b604051601f8201601f19908116603f011681016001600160401b038111828210171561016b5761016b6100b7565b604052818152828201602001881015610182575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156101f6575f198160200360031b1b821691505b50919050565b60805160a05160c05161399c61023b5f395f818161049e0152611c2701525f81816101f90152611cd201525f81816103b30152610899015261399c5ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c80639a43e3fb116100bf578063d40cda1611610079578063d40cda16146103d5578063d9f12db2146103e8578063dab42d7e146103fb578063ea0d81491461041d578063ea194e2e14610430578063f698da2514610443575f5ffd5b80639a43e3fb1461032d578063a2d701f61461034e578063aa165c3014610361578063b05c8f6d14610374578063bd30a0b91461039b578063ca8aa7c7146103ae575f5ffd5b806354fd4d501161011057806354fd4d501461029a5780637690e395146102a25780637cffe48c146102b557806381b2796c146102d55780638256909c146102e857806387ab86f41461031a575f5ffd5b80630934d59714610157578063110304021461017f578063166aa127146101945780633b32a7bd146101c95780634657e26a146101f457806350435add1461021b575b5f5ffd5b61016a610165366004612d29565b61044b565b60405190151581526020015b60405180910390f35b61019261018d366004612d71565b61045f565b005b6101bb7f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f8181565b604051908152602001610176565b6101dc6101d7366004612d9a565b610479565b6040516001600160a01b039091168152602001610176565b6101dc7f000000000000000000000000000000000000000000000000000000000000000081565b61028d610229366004612e12565b8151602080840151835180519083015185840151805190850151604080519687019790975295850193909352606084810192909252608084015260a083019190915260c082019290925260e001604051602081830303815290604052905092915050565b6040516101769190612ebd565b61028d610497565b6101bb6102b0366004612f0c565b6104c7565b6102c86102c3366004612f69565b61056f565b6040516101769190612fb7565b6101926102e3366004612fc5565b610595565b6102fb6102f6366004613054565b61078a565b604080516001600160a01b039093168352901515602083015201610176565b610192610328366004612d29565b610878565b61034061033b366004612d9a565b610be4565b60405161017692919061311a565b61019261035c366004613165565b610e7a565b61028d61036f366004612d9a565b610fab565b6101bb7fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8181565b61016a6103a9366004612d9a565b6111ab565b6101dc7f000000000000000000000000000000000000000000000000000000000000000081565b6101926103e3366004612fc5565b6111e8565b6101bb6103f63660046131a6565b6113ec565b61016a6104093660046131de565b5f9081526002602052604090205460ff1690565b61019261042b3660046131f5565b611485565b6101bb61043e366004612d9a565b6115bc565b6101bb611789565b5f6104568284611842565b90505b92915050565b815161046a8161190a565b6104748383611933565b505050565b5f6104848383610fab565b61048d9061321e565b60601c9392505050565b60606104c27f00000000000000000000000000000000000000000000000000000000000000006119ad565b905090565b5f5f7fda86e76deaed01641f80ff5f72c372a038fa5182697aeb967e8b1f9819d58d8186865f015187602001518787604051610504929190613276565b6040805191829003822060208301969096526001600160a01b039485169082015292909116606083015263ffffffff16608082015260a081019190915260c001604051602081830303815290604052805190602001209050610565816119ea565b9695505050505050565b5f60015f61057c84611a30565b815260208101919091526040015f205460ff1692915050565b8561059f8161190a565b5f60015f6105ac89611a30565b815260208101919091526040015f9081205460ff1691508160028111156105d5576105d5612f83565b036105f357604051635cd3106d60e11b815260040160405180910390fd5b6105fd8789611842565b505f5f5f61060a8a611a30565b815260208082019290925260409081015f9081206001600160a01b038d1682529092529020805490915088908a9060ff1661066357604051632e40e18760e01b815260040161065a9291906132a3565b60405180910390fd5b505060038101546001600160401b0316156106915760405163a54aa36960e01b815260040160405180910390fd5b5f60045f61069e8b611a30565b815260208101919091526040015f20546001600160401b0316905067fffffffffffffffe1981016106e2576040516310297f8760e11b815260040160405180910390fd5b5f6106ed82426132dd565b90506106fe8a8c8b8b8b8b8a611a8e565b506002830161070e898b8361338c565b5060038301805467ffffffffffffffff19166001600160401b0383161790556040516001600160a01b038c16907f600c8ea5356df2fad359d32cf64544f00ad31ccf4133a70b4da8630b1e3658d190610775908d90889060018901908f908f908990613468565b60405180910390a25050505050505050505050565b5f5f5f60015f61079987611a30565b815260208101919091526040015f9081205460ff16915060018260028111156107c4576107c4612f83565b036107d6575083516020850120610847565b60028260028111156107ea576107ea612f83565b0361082e575f5f86806020019051810190610805919061352c565b60408051808201825283815260209081019283525f938452915190915290209250610847915050565b60405163fdea7c0960e01b815260040160405180910390fd5b5f818152600360205260409020546001600160a01b03168061086988826111ab565b945094505050505b9250929050565b816108828161190a565b6040516309a961f360e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690631352c3e6906108d0908690869060040161354e565b602060405180830381865afa1580156108eb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090f919061356b565b158284909161093357604051631070287960e01b815260040161065a9291906132a3565b50505f60015f61094285611a30565b815260208101919091526040015f9081205460ff16915081600281111561096b5761096b612f83565b0361098957604051635cd3106d60e11b815260040160405180910390fd5b5f5f5f61099586611a30565b815260208082019290925260409081015f9081206001600160a01b03891682528352819020815160808101909252805460ff161515825260018101805492939192918401916109e3906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0f906132fc565b8015610a5a5780601f10610a3157610100808354040283529160200191610a5a565b820191905f5260205f20905b815481529060010190602001808311610a3d57829003601f168201915b50505050508152602001600282018054610a73906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f906132fc565b8015610aea5780601f10610ac157610100808354040283529160200191610aea565b820191905f5260205f20905b815481529060010190602001808311610acd57829003601f168201915b5050509183525050600391909101546001600160401b0316602090910152805190915084908690610b3057604051632e40e18760e01b815260040161065a9291906132a3565b50505f5f610b3d86611a30565b815260208082019290925260409081015f9081206001600160a01b03891682529092528120805460ff1916815590610b786001830182612b33565b610b85600283015f612b33565b50600301805467ffffffffffffffff191690556040516001600160a01b038616907f28d3c3cee49478ec6fd219cfd685cd15cd01d95cabf69b4b7b57f9eaa3eb644290610bd5908790869061358a565b60405180910390a25050505050565b604080518082019091525f8082526020820152610bff612b6a565b5f60015f610c0c87611a30565b815260208101919091526040015f205460ff1690506002816002811115610c3557610c35612f83565b14610c535760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f610c5f88611a30565b815260208082019290925260409081015f9081206001600160a01b03891682528352819020815160808101909252805460ff16151582526001810180549293919291840191610cad906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd9906132fc565b8015610d245780601f10610cfb57610100808354040283529160200191610d24565b820191905f5260205f20905b815481529060010190602001808311610d0757829003601f168201915b50505050508152602001600282018054610d3d906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610d69906132fc565b8015610db45780601f10610d8b57610100808354040283529160200191610db4565b820191905f5260205f20905b815481529060010190602001808311610d9757829003601f168201915b5050509183525050600391909101546001600160401b03166020909101528051909150610e1d5750506040805180820182525f80825260208083018290528351808501855282815280820192909252835180850190945282845283019190915292509050610871565b5f610e2782611b5f565b90505f5f5f5f84806020019051810190610e4191906135e9565b604080518082018252948552602080860194909452805180820190915291825291810191909152909c909b509950505050505050505050565b8251610e858161190a565b6001836002811115610e9957610e99612f83565b1480610eb657506002836002811115610eb457610eb4612f83565b145b610ed35760405163fdea7c0960e01b815260040160405180910390fd5b5f60015f610ee087611a30565b815260208101919091526040015f9081205460ff169150816002811115610f0957610f09612f83565b14610f26576040516281f09f60e01b815260040160405180910390fd5b8360015f610f3388611a30565b815260208101919091526040015f20805460ff19166001836002811115610f5c57610f5c612f83565b02179055507fb2266cb118e57095fcdbedb24dabd9fc9f5127e2dbedf62ce6ee71696fb8b6e78585604051610f9292919061358a565b60405180910390a1610fa48584611933565b5050505050565b60605f60015f610fba86611a30565b815260208101919091526040015f205460ff1690506001816002811115610fe357610fe3612f83565b146110015760405163fdea7c0960e01b815260040160405180910390fd5b5f5f5f61100d87611a30565b815260208082019290925260409081015f9081206001600160a01b03881682528352819020815160808101909252805460ff1615158252600181018054929391929184019161105b906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611087906132fc565b80156110d25780601f106110a9576101008083540402835291602001916110d2565b820191905f5260205f20905b8154815290600101906020018083116110b557829003601f168201915b505050505081526020016002820180546110eb906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611117906132fc565b80156111625780601f1061113957610100808354040283529160200191611162565b820191905f5260205f20905b81548152906001019060200180831161114557829003601f168201915b5050509183525050600391909101546001600160401b031660209091015280519091506111a15760405180602001604052805f81525092505050610459565b5f61056582611b5f565b5f5f5f6111b785611a30565b815260208082019290925260409081015f9081206001600160a01b038616825290925290205460ff16905092915050565b856111f28161190a565b5f60015f6111ff89611a30565b815260208101919091526040015f9081205460ff16915081600281111561122857611228612f83565b0361124657604051635cd3106d60e11b815260040160405180910390fd5b5f5f61125189611a30565b815260208082019290925260409081015f9081206001600160a01b038c16825290925290205460ff1615611298576040516342ee68b560e01b815260040160405180910390fd5b6112a787898888888887611a8e565b50604051806080016040528060011515815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505060408051602081810183528482528501529092018190529050806113158a611a30565b815260208082019290925260409081015f9081206001600160a01b038d1682528352208251815460ff1916901515178155908201516001820190611359908261362f565b506040820151600282019061136e908261362f565b50606091909101516003909101805467ffffffffffffffff19166001600160401b039092169190911790556040516001600160a01b038916907f1201ce0c5e577111bce91e907fd99cb183da5edc1e3fb650ca40769e4e9176dd906113da908a9085908b908b906136e4565b60405180910390a25050505050505050565b81516020808401516040515f938493611459937f991b0a3376ce87f8ecc5d70962279ac09cdce934e8b5b9683e73c8ff087c7f81938a93928991019485526001600160a01b039384166020860152918316604085015263ffffffff16606084015216608082015260a00190565b60405160208183030381529060405280519060200120905061147a816119ea565b9150505b9392505050565b81516114908161190a565b60018260028111156114a4576114a4612f83565b14806114c1575060028260028111156114bf576114bf612f83565b145b6114de5760405163fdea7c0960e01b815260040160405180910390fd5b5f60015f6114eb86611a30565b815260208101919091526040015f9081205460ff16915081600281111561151457611514612f83565b14611531576040516281f09f60e01b815260040160405180910390fd5b8260015f61153e87611a30565b815260208101919091526040015f20805460ff1916600183600281111561156757611567612f83565b02179055507fb2266cb118e57095fcdbedb24dabd9fc9f5127e2dbedf62ce6ee71696fb8b6e7848460405161159d92919061358a565b60405180910390a16115b6846001600160401b03611933565b50505050565b5f5f5f5f6115c986611a30565b815260208082019290925260409081015f9081206001600160a01b03871682528352819020815160808101909252805460ff16151582526001810180549293919291840191611617906132fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611643906132fc565b801561168e5780601f106116655761010080835404028352916020019161168e565b820191905f5260205f20905b81548152906001019060200180831161167157829003601f168201915b505050505081526020016002820180546116a7906132fc565b80601f01602080910402602001604051908101604052809291908181526020018280546116d3906132fc565b801561171e5780601f106116f55761010080835404028352916020019161171e565b820191905f5260205f20905b81548152906001019060200180831161170157829003601f168201915b5050509183525050600391909101546001600160401b031660209091015290505f60018161174b87611a30565b815260208101919091526040015f2054825160ff909116915061177357505f91506104599050565b5f61177d83611b5f565b90506105658183611b9e565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6117f6611c1f565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f5f5f5f61184f86611a30565b815260208082019290925260409081015f9081206001600160a01b03871682529092529020805490915060ff16611889575f915050610459565b60038101546001600160401b0316158015906118b2575060038101546001600160401b03164210155b1561190157600181016118c86002830182613711565b5060408051602081019091525f815260028201906118e6908261362f565b50600301805467ffffffffffffffff19169055506001610459565b505f9392505050565b61191381611c94565b6119305760405163932d94f760e01b815260040160405180910390fd5b50565b8060045f61194085611a30565b81526020019081526020015f205f6101000a8154816001600160401b0302191690836001600160401b031602179055507f22b2b63b5820f9d933565468845820b939bf5ad654ea6ab5bdd3728f19e4580f82826040516119a19291906137d1565b60405180910390a15050565b60605f6119b983611d3d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f6119f3611789565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f815f0151826020015163ffffffff16604051602001611a7692919060609290921b6001600160601b031916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610459906137f5565b5f806001836002811115611aa457611aa4612f83565b03611abe57611ab7898989898989611d64565b9050611ae5565b6002836002811115611ad257611ad2612f83565b0361082e57611ab7898989898989611e56565b5f8181526002602052604090205460ff1615611b1457604051630c7bc20160e11b815260040160405180910390fd5b5f818152600260209081526040808320805460ff191660011790556003909152902080546001600160a01b038a166001600160a01b031990911617905590505b979650505050505050565b6060818101516001600160401b031615801590611b89575081606001516001600160401b03164210155b15611b9657506040015190565b506020015190565b5f6001826002811115611bb357611bb3612f83565b03611bc5575081516020830120610459565b6002826002811115611bd957611bd9612f83565b0361082e575f5f84806020019051810190611bf491906135e9565b505060408051808201825283815260209081019283525f938452915190915290209250610459915050565b60605f611c4b7f00000000000000000000000000000000000000000000000000000000000000006119ad565b9050805f81518110611c5f57611c5f613262565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa158015611d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610459919061356b565b5f60ff8216601f81111561045957604051632cd44ac360e21b815260040160405180910390fd5b5f60148414611d865760405163d109118160e01b815260040160405180910390fd5b5f611d918587613818565b60601c905080611db457604051634935505f60e01b815260040160405180910390fd5b5f611df687878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060019250611b9e915050565b90505f611e04898b856113ec565b9050611e49838288888080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505f199250611fc0915050565b5098975050505050505050565b5f60c08414611e785760405163d109118160e01b815260040160405180910390fd5b60408214611e9957604051638baa579f60e01b815260040160405180910390fd5b5f611ea6878988886104c7565b90505f80808080611eb98a8c018c613856565b9350935093509350835f148015611ece575082155b15611eec57604051634935505f60e01b815260040160405180910390fd5b5f80611efa8a8c018c613890565b6040805180820182528381526020808201849052825180840184528b81528082018b90528351808501909452898452908301889052939550919350909190611f468b8484845f80612012565b9a508a9950611f729850505050505050505057604051638baa579f60e01b815260040160405180910390fd5b611fb387878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525060029250611b9e915050565b9998505050505050505050565b42811015611fe157604051630819bdcd60e01b815260040160405180910390fd5b611ff56001600160a01b03851684846120da565b6115b657604051638baa579f60e01b815260040160405180910390fd5b5f5f5f61201e8961212e565b90505f61202d8a89898c6121b8565b90505f61204461203d8a8461226c565b8b906122dc565b90505f61208661207f846120796040805180820182525f80825260209182015281518083019092526001825260029082015290565b9061226c565b85906122dc565b905087156120ab576120a28261209a612350565b838c8b612410565b965094506120cb565b6120be826120b7612350565b838c612624565b955085156120cb57600194505b50505050965096945050505050565b5f5f5f6120e7858561285b565b90925090505f8160048111156120ff576120ff612f83565b14801561211d5750856001600160a01b0316826001600160a01b0316145b80610565575061056586868661289a565b604080518082019091525f80825260208201525f808061215b5f5160206139475f395f51905f52866138b0565b90505b61216781612981565b90935091505f5160206139475f395f51905f52828309830361219f576040805180820190915290815260208101919091529392505050565b5f5160206139475f395f51905f5260018208905061215e565b8251602080850151845180519083015186840151805190850151875188870151604080519889018e90528801989098526060870195909552608086019390935260a085019190915260c084015260e08301526101008201526101208101919091525f907f30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f00000019061014001604051602081830303815290604052805190602001205f1c61226391906138b0565b95945050505050565b604080518082019091525f8082526020820152612287612b8f565b835181526020808501519082015260408082018490525f908360608460076107d05a03fa905080806122b557fe5b50806122d457604051632319df1960e11b815260040160405180910390fd5b505092915050565b604080518082019091525f80825260208201526122f7612bad565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460066107d05a03fa9050808061233157fe5b50806122d45760405163d4b68fd760e01b815260040160405180910390fd5b612358612b6a565b50604080516080810182527f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c28183019081527f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed6060830152815281518083019092527f275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec82527f1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d60208381019190915281019190915290565b6040805180820182528681526020808201869052825180840190935286835282018490525f91829190612441612bcb565b5f5b60028110156125f8575f6124588260066138cf565b905084826002811061246c5761246c613262565b6020020151518361247d835f6138e6565b600c811061248d5761248d613262565b60200201528482600281106124a4576124a4613262565b602002015160200151838260016124bb91906138e6565b600c81106124cb576124cb613262565b60200201528382600281106124e2576124e2613262565b60200201515151836124f58360026138e6565b600c811061250557612505613262565b602002015283826002811061251c5761251c613262565b60200201515160016020020151836125358360036138e6565b600c811061254557612545613262565b602002015283826002811061255c5761255c613262565b6020020151602001515f6002811061257657612576613262565b6020020151836125878360046138e6565b600c811061259757612597613262565b60200201528382600281106125ae576125ae613262565b6020020151602001516001600281106125c9576125c9613262565b6020020151836125da8360056138e6565b600c81106125ea576125ea613262565b602002015250600101612443565b50612601612bea565b5f6020826101808560088cfa9151919c9115159b50909950505050505050505050565b6040805180820182528581526020808201859052825180840190935285835282018390525f91612652612bcb565b5f5b6002811015612809575f6126698260066138cf565b905084826002811061267d5761267d613262565b6020020151518361268e835f6138e6565b600c811061269e5761269e613262565b60200201528482600281106126b5576126b5613262565b602002015160200151838260016126cc91906138e6565b600c81106126dc576126dc613262565b60200201528382600281106126f3576126f3613262565b60200201515151836127068360026138e6565b600c811061271657612716613262565b602002015283826002811061272d5761272d613262565b60200201515160016020020151836127468360036138e6565b600c811061275657612756613262565b602002015283826002811061276d5761276d613262565b6020020151602001515f6002811061278757612787613262565b6020020151836127988360046138e6565b600c81106127a8576127a8613262565b60200201528382600281106127bf576127bf613262565b6020020151602001516001600281106127da576127da613262565b6020020151836127eb8360056138e6565b600c81106127fb576127fb613262565b602002015250600101612654565b50612812612bea565b5f6020826101808560086107d05a03fa9050808061282c57fe5b508061284b576040516324ccc79360e21b815260040160405180910390fd5b5051151598975050505050505050565b5f5f825160410361288f576020830151604084015160608501515f1a612883878285856129fd565b94509450505050610871565b505f90506002610871565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016128c29291906138f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516129009190613919565b5f60405180830381855afa9150503d805f8114612938576040519150601f19603f3d011682016040523d82523d5f602084013e61293d565b606091505b509150915081801561295157506020815110155b801561056557508051630b135d3f60e11b90612976908301602090810190840161392f565b149695505050505050565b5f80805f5160206139475f395f51905f5260035f5160206139475f395f51905f52865f5160206139475f395f51905f52888909090890505f6129f1827f0c19139cb84c680a6e14116da060561765e05aa45a1c72a34f082305b61f3f525f5160206139475f395f51905f52612aba565b91959194509092505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612a3257505f90506003612ab1565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a83573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612aab575f60019250925050612ab1565b91505f90505b94509492505050565b5f5f612ac4612bea565b612acc612c08565b602080825281810181905260408201819052606082018890526080820187905260a082018690528260c08360056107d05a03fa92508280612b0957fe5b5082612b285760405163d51edae360e01b815260040160405180910390fd5b505195945050505050565b508054612b3f906132fc565b5f825580601f10612b4e575050565b601f0160209004905f5260205f20908101906119309190612c26565b6040518060400160405280612b7d612c3e565b8152602001612b8a612c3e565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b604051806101800160405280600c906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b5b80821115612c3a575f8155600101612c27565b5090565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b0381168114612c72575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715612cad57612cad612c77565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612cdb57612cdb612c77565b604052919050565b5f60408284031215612cf3575f5ffd5b612cfb612c8b565b9050612d0682612c5c565b8152602082013563ffffffff81168114612d1e575f5ffd5b602082015292915050565b5f5f60608385031215612d3a575f5ffd5b612d4383612c5c565b9150612d528460208501612ce3565b90509250929050565b80356001600160401b0381168114612c72575f5ffd5b5f5f60608385031215612d82575f5ffd5b612d8c8484612ce3565b9150612d5260408401612d5b565b5f5f60608385031215612dab575f5ffd5b612db58484612ce3565b9150612d5260408401612c5c565b5f82601f830112612dd2575f5ffd5b612ddc6040612cb3565b806040840185811115612ded575f5ffd5b845b81811015612e07578035845260209384019301612def565b509095945050505050565b5f5f82840360c0811215612e24575f5ffd5b6040811215612e31575f5ffd5b612e39612c8b565b843581526020808601359082015292506080603f1982011215612e5a575f5ffd5b50612e63612c8b565b612e708560408601612dc3565b8152612e7f8560808601612dc3565b6020820152809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6104566020830184612e8f565b5f5f83601f840112612edf575f5ffd5b5081356001600160401b03811115612ef5575f5ffd5b602083019150836020828501011115610871575f5ffd5b5f5f5f5f60808587031215612f1f575f5ffd5b612f2885612c5c565b9350612f378660208701612ce3565b925060608501356001600160401b03811115612f51575f5ffd5b612f5d87828801612ecf565b95989497509550505050565b5f60408284031215612f79575f5ffd5b6104568383612ce3565b634e487b7160e01b5f52602160045260245ffd5b60038110612fb357634e487b7160e01b5f52602160045260245ffd5b9052565b602081016104598284612f97565b5f5f5f5f5f5f60a08789031215612fda575f5ffd5b612fe387612c5c565b9550612ff28860208901612ce3565b945060608701356001600160401b0381111561300c575f5ffd5b61301889828a01612ecf565b90955093505060808701356001600160401b03811115613036575f5ffd5b61304289828a01612ecf565b979a9699509497509295939492505050565b5f5f60608385031215613065575f5ffd5b61306f8484612ce3565b915060408301356001600160401b03811115613089575f5ffd5b8301601f81018513613099575f5ffd5b80356001600160401b038111156130b2576130b2612c77565b6130c5601f8201601f1916602001612cb3565b8181528660208385010111156130d9575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b805f5b60028110156115b65781518452602093840193909101906001016130fb565b5f60c082019050835182526020840151602083015261313d6040830184516130f8565b602083015161314f60808401826130f8565b509392505050565b803560038110612c72575f5ffd5b5f5f5f60808486031215613177575f5ffd5b6131818585612ce3565b925061318f60408501613157565b915061319d60608501612d5b565b90509250925092565b5f5f5f608084860312156131b8575f5ffd5b6131c184612c5c565b92506131d08560208601612ce3565b915061319d60608501612c5c565b5f602082840312156131ee575f5ffd5b5035919050565b5f5f60608385031215613206575f5ffd5b6132108484612ce3565b9150612d5260408401613157565b805160208201516001600160601b031981169190601482101561325b576001600160601b03196001600160601b03198360140360031b1b82161692505b5050919050565b634e487b7160e01b5f52603260045260245ffd5b818382375f9101908152919050565b80516001600160a01b0316825260209081015163ffffffff16910152565b606081016132b18285613285565b6001600160a01b039290921660409190910152919050565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190811115610459576104596132c9565b600181811c9082168061331057607f821691505b60208210810361332e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561047457805f5260205f20601f840160051c810160208510156133595750805b601f840160051c820191505b81811015610fa4575f8155600101613365565b5f19600383901b1c191660019190911b1790565b6001600160401b038311156133a3576133a3612c77565b6133b7836133b183546132fc565b83613334565b5f601f8411600181146133e3575f85156133d15750838201355b6133db8682613378565b845550610fa4565b5f83815260208120601f198716915b8281101561341257868501358255602094850194600190920191016133f2565b508682101561342e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6134728188613285565b61347f6040820187612f97565b60c060608201525f5f8654613493816132fc565b8060c0860152600182165f81146134b157600181146134cd576134fe565b60ff19831660e087015260e082151560051b87010193506134fe565b895f5260205f205f5b838110156134f557815488820160e001526001909101906020016134d6565b870160e0019450505b5050508281036080840152613514818688613440565b915050611b5460a08301846001600160401b03169052565b5f5f6040838503121561353d575f5ffd5b505080516020909101519092909150565b6001600160a01b03831681526060810161147e6020830184613285565b5f6020828403121561357b575f5ffd5b8151801515811461147e575f5ffd5b606081016135988285613285565b61147e6040830184612f97565b5f82601f8301126135b4575f5ffd5b6135be6040612cb3565b8060408401858111156135cf575f5ffd5b845b81811015612e075780518452602093840193016135d1565b5f5f5f5f60c085870312156135fc575f5ffd5b84516020860151909450925061361586604087016135a5565b915061362486608087016135a5565b905092959194509250565b81516001600160401b0381111561364857613648612c77565b61365c8161365684546132fc565b84613334565b6020601f821160018114613689575f83156136775750848201515b6136818482613378565b855550610fa4565b5f84815260208120601f198516915b828110156136b85787850151825560209485019460019092019101613698565b50848210156136d557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6136ee8186613285565b6136fb6040820185612f97565b608060608201525f610565608083018486613440565b81810361371c575050565b61372682546132fc565b6001600160401b0381111561373d5761373d612c77565b61374b8161365684546132fc565b5f601f82116001811461376e575f83156136775750848201546136818482613378565b5f8581526020808220868352908220601f198616925b838110156137a45782860154825560019586019590910190602001613784565b50858310156137c157818501545f19600388901b60f8161c191681555b5050505050600190811b01905550565b606081016137df8285613285565b6001600160401b03831660408301529392505050565b8051602080830151919081101561332e575f1960209190910360031b1b16919050565b80356001600160601b0319811690601484101561384f576001600160601b03196001600160601b03198560140360031b1b82161691505b5092915050565b5f5f5f5f60c08587031215613869575f5ffd5b84359350602085013592506138818660408701612dc3565b91506136248660808701612dc3565b5f5f604083850312156138a1575f5ffd5b50508035926020909101359150565b5f826138ca57634e487b7160e01b5f52601260045260245ffd5b500690565b8082028115828204841417610459576104596132c9565b80820180821115610459576104596132c9565b828152604060208201525f6139116040830184612e8f565b949350505050565b5f82518060208501845e5f920191825250919050565b5f6020828403121561393f575f5ffd5b505191905056fe30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47a2646970667358221220d5a3b5db4ec21adaddc3a38b8798b6f47011d8119df2771ee5d2ba8e860c6fea64736f6c634300081e0033", } // KeyRegistrarABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/KeyRegistrarStorage/binding.go b/pkg/bindings/KeyRegistrarStorage/binding.go index d851d70526..e45c248368 100644 --- a/pkg/bindings/KeyRegistrarStorage/binding.go +++ b/pkg/bindings/KeyRegistrarStorage/binding.go @@ -49,7 +49,7 @@ type OperatorSet struct { // KeyRegistrarStorageMetaData contains all meta data concerning the KeyRegistrarStorage contract. var KeyRegistrarStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configureOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deregisterKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"encodeBN254KeyData\",\"inputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getBN254Key\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"g1Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"g2Point\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254KeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAAddress\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getECDSAKeyRegistrationMessageHash\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyAddress\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getKeyHash\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorFromSigningKey\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"keyData\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetCurveType\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isKeyGloballyRegistered\",\"inputs\":[{\"name\":\"keyHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"registerKey\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"pubkey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AggregateBN254KeyUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"newAggregateKey\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyDeregistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"KeyRegistered\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"pubkey\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetConfigured\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"curveType\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ConfigurationAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeyFormat\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidKeypair\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"KeyNotFound\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"OperatorAlreadyRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorSetNotConfigured\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorStillSlashable\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"ZeroAddress\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ZeroPubkey\",\"inputs\":[]}]", } // KeyRegistrarStorageABI is the input ABI used to generate the binding from. @@ -585,37 +585,6 @@ func (_KeyRegistrarStorage *KeyRegistrarStorageCallerSession) IsRegistered(opera return _KeyRegistrarStorage.Contract.IsRegistered(&_KeyRegistrarStorage.CallOpts, operatorSet, operator) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_KeyRegistrarStorage *KeyRegistrarStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _KeyRegistrarStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_KeyRegistrarStorage *KeyRegistrarStorageSession) Version() (string, error) { - return _KeyRegistrarStorage.Contract.Version(&_KeyRegistrarStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_KeyRegistrarStorage *KeyRegistrarStorageCallerSession) Version() (string, error) { - return _KeyRegistrarStorage.Contract.Version(&_KeyRegistrarStorage.CallOpts) -} - // ConfigureOperatorSet is a paid mutator transaction binding the contract method 0xea0d8149. // // Solidity: function configureOperatorSet((address,uint32) operatorSet, uint8 curveType) returns() diff --git a/pkg/bindings/Merkle/binding.go b/pkg/bindings/Merkle/binding.go index c04c193866..2e37506faa 100644 --- a/pkg/bindings/Merkle/binding.go +++ b/pkg/bindings/Merkle/binding.go @@ -32,7 +32,7 @@ var ( // MerkleMetaData contains all meta data concerning the Merkle contract. var MerkleMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"LeavesNotPowerOfTwo\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoLeaves\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotEnoughLeaves\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212207533eb554d661aa14ef6c353843c60b9f3700f9a67001c1733f0924af8e48fbc64736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220453d11e2175509f3c5f766202c58b4b2caeb7616e1ce5339991b2c20aca6575864736f6c634300081e0033", } // MerkleABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/OperatorSetLib/binding.go b/pkg/bindings/OperatorSetLib/binding.go index d27bdfc373..cdf9dede7e 100644 --- a/pkg/bindings/OperatorSetLib/binding.go +++ b/pkg/bindings/OperatorSetLib/binding.go @@ -32,7 +32,7 @@ var ( // OperatorSetLibMetaData contains all meta data concerning the OperatorSetLib contract. var OperatorSetLibMetaData = &bind.MetaData{ ABI: "[]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212200d41c40979a555029104dbf8f0150fa995e0afa0623de87526ee70333455ae7f64736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220dbe841e665b6d57d4262f2520686a72aeee5bea5cfd6e25c5efe56c5f9840cee64736f6c634300081e0033", } // OperatorSetLibABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/OperatorTableUpdater/binding.go b/pkg/bindings/OperatorTableUpdater/binding.go index 360702d0ed..1ab4ee8179 100644 --- a/pkg/bindings/OperatorTableUpdater/binding.go +++ b/pkg/bindings/OperatorTableUpdater/binding.go @@ -85,8 +85,8 @@ type OperatorSet struct { // OperatorTableUpdaterMetaData contains all meta data concerning the OperatorTableUpdater contract. var OperatorTableUpdaterMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"GENERATOR_GLOBAL_TABLE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENERATOR_MAX_STALENESS_PERIOD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENERATOR_REFERENCE_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_INFO_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_TABLE_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorInfoLeaf\",\"inputs\":[{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableLeaf\",\"inputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGenerator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGeneratorConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGeneratorReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateSignableDigest\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumberByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceTimestampByBlockNumber\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_initialGenerator\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_globalRootConfirmationThreshold\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"generatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isRootValid\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRootValidByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateGenerator\",\"inputs\":[{\"name\":\"generator\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"generatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"GeneratorUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootDisabled\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotDisableGeneratorRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenerator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", - Bin: "0x610100604052348015610010575f5ffd5b50604051612e6a380380612e6a83398101604081905261002f916101b9565b808484846001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007b81610090565b60e052506100876100d6565b505050506102fe565b5f5f829050601f815111156100c3578260405163305a27a960e01b81526004016100ba91906102a3565b60405180910390fd5b80516100ce826102d8565b179392505050565b5f54610100900460ff161561013d5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100ba565b5f5460ff9081161461018c575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cc575f5ffd5b84516101d78161018e565b60208601519094506101e88161018e565b60408601519093506101f98161018e565b60608601519092506001600160401b03811115610214575f5ffd5b8501601f81018713610224575f5ffd5b80516001600160401b0381111561023d5761023d6101a5565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026b5761026b6101a5565b604052818152828201602001891015610282575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102f8575f198160200360031b1b821691505b50919050565b60805160a05160c05160e051612aec61037e5f395f610a1301525f81816105b501528181610aad0152610e6d01525f818161061c0152818161094101528181610a6d01528181610b1901528181610dc8015281816111420152818161142b01526114dd01525f818161053c0152818161160901526118f50152612aec5ff3fe608060405234801561000f575f5ffd5b5060043610610255575f3560e01c80636f728c5011610140578063ad0f9582116100bf578063c3be1e3311610084578063c3be1e3314610672578063c5916a3914610685578063eaaed9d5146106aa578063f2fde38b146106bd578063fabc1cbc146106d0578063fd967f47146106e3575f5ffd5b8063ad0f9582146105b0578063b0cb3a24146105d7578063b8c1430614610617578063c252aa221461063e578063c3621f0a1461065f575f5ffd5b80638da5cb5b116101055780638da5cb5b1461055e5780639ea947781461056f5780639f7e206f14610582578063a2c902f514610595578063a2f2e24d1461059d575f5ffd5b80636f728c50146104f5578063715018a6146105205780637551ba3414610528578063790961ea14610530578063886f119514610537575f5ffd5b806331a599d2116101d757806354fd4d501161019c57806354fd4d5014610470578063595c6a67146104855780635ac86ab71461048d5780635c975abb146104b0578063612abcb0146104b857806364e1df84146104c0575f5ffd5b806331a599d2146103ea5780633ef6cd7a1461040f578063401c370f146104365780634624e6a314610449578063538a37901461045d575f5ffd5b80631e2ca2601161021d5780631e2ca260146103125780632370356c1461035b57806323b7b5b21461036e57806328522d791461039657806330ef41b4146103b8575f5ffd5b806306f5187514610259578063121409ea1461026e578063136439dd1461028d578063193b79f3146102a05780631bdc0deb146102dd575b5f5ffd5b61026c610267366004611b4f565b6106ec565b005b610276608e81565b60405160ff90911681526020015b60405180910390f35b61026c61029b366004611bc5565b6108c6565b6102c86102ae366004611bed565b63ffffffff9081165f908152609b60205260409020541690565b60405163ffffffff9091168152602001610284565b6103047fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a86981565b604051908152602001610284565b6040805180820182525f80825260209182015281518083019092526098546001600160a01b0381168352600160a01b900463ffffffff16908201525b6040516102849190611c26565b61026c610369366004611c34565b610900565b6102c861037c366004611bed565b63ffffffff9081165f908152609a60205260409020541690565b60975462010000900463ffffffff165f90815260996020526040902054610304565b6103da6103c6366004611bc5565b5f908152609c602052604090205460ff1690565b6040519015158152602001610284565b60975462010000900463ffffffff9081165f908152609a6020526040902054166102c8565b6103047f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc81565b610304610444366004611c4d565b610914565b60975462010000900463ffffffff166102c8565b61030461046b366004611d3c565b6109bd565b610478610a0c565b6040516102849190611e34565b61026c610a3c565b6103da61049b366004611e69565b606654600160ff9092169190911b9081161490565b606654610304565b6102c8600181565b6103da6104ce366004611bed565b63ffffffff165f908152609960209081526040808320548352609c90915290205460ff1690565b610508610503366004611e97565b610a50565b6040516001600160a01b039091168152602001610284565b61026c610aef565b6102c8610b00565b6102c85f81565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610508565b61026c61057d366004611ef4565b610b8e565b61026c610590366004611f8f565b610ede565b610276607581565b6103046105ab366004611fda565b610ef0565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b6040805180820182525f8082526020918201528151808301909252609d546001600160a01b0381168352600160a01b900463ffffffff169082015261034e565b6105087f000000000000000000000000000000000000000000000000000000000000000081565b60975461064c9061ffff1681565b60405161ffff9091168152602001610284565b61026c61066d366004611bc5565b610f26565b610304610680366004611c4d565b610fdb565b610304610693366004611bed565b63ffffffff165f9081526099602052604090205490565b61026c6106b8366004612018565b611043565b61026c6106cb366004612084565b611292565b61026c6106de366004611bc5565b611308565b61064c61271081565b5f54610100900460ff161580801561070a57505f54600160ff909116105b806107235750303b15801561072357505f5460ff166001145b61078b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156107ac575f805461ff0019166101001790555b6107b586611375565b6107be856113c6565b609d80546001600160c01b031916301790556107da8483611403565b6107e383611583565b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8697fbb86fbc034f4e382929974bcd8419ed626b0ea647f962d89ba2fb6bd28785ab98190555f52609c6020527f38353ab40115e4013d688e07cff5857dde443bd05e72c49fcb5e684a9bb9efc4805460ff19166001179055609780544263ffffffff16620100000265ffffffff00001990911617905580156108be575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6108ce6115f4565b60665481811681146108f35760405163c61dca5d60e01b815260040160405180910390fd5b6108fc826113c6565b5050565b610908611697565b61091181611583565b50565b5f5f610921858585610fdb565b6040516306119d0d60e21b815260016004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631846743490604401602060405180830381865afa15801561098e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109b2919061209f565b9150505b9392505050565b5f6075826040516020016109d191906120f0565b60408051601f19818403018152908290526109ef929160200161211d565b604051602081830303815290604052805190602001209050919050565b6060610a377f00000000000000000000000000000000000000000000000000000000000000006116f1565b905090565b610a446115f4565b610a4e5f196113c6565b565b5f6002826002811115610a6557610a65612146565b03610a9157507f0000000000000000000000000000000000000000000000000000000000000000919050565b6001826002811115610aa557610aa5612146565b03610ad157507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b610af7611697565b610a4e5f611375565b604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90610b4f9060989060040161215a565b602060405180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a379190612181565b6001610b998161172e565b610ba1611759565b5f5f5f5f610baf87876117b2565b5f8f8152609c60205260409020549397509195509350915060ff16610be75760405163504570e360e01b815260040160405180910390fd5b604080518082019091526098546001600160a01b0381168252600160a01b900463ffffffff166020820152610c1b906117f9565b610c24856117f9565b03610c4257604051631fb1705560e21b815260040160405180910390fd5b610c4b83610a50565b6001600160a01b031663cd83a72b858e6040518363ffffffff1660e01b8152600401610c7892919061219c565b602060405180830381865afa158015610c93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cb791906121bd565b15610cc55750505050610eca565b610cce83610a50565b6001600160a01b0316635ddb9b5b856040518263ffffffff1660e01b8152600401610cf99190611c26565b602060405180830381865afa158015610d14573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d389190612181565b63ffffffff168c63ffffffff1611610d635760405163207617df60e01b815260040160405180910390fd5b63ffffffff8c165f908152609960205260409020548b14610d975760405163639d09b560e11b815260040160405180910390fd5b610dad8b8b8b8b610da88c8c610ef0565b61185c565b6002836002811115610dc157610dc1612146565b03610e52577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b858e610e00856118c1565b866040518563ffffffff1660e01b8152600401610e2094939291906121dc565b5f604051808303815f87803b158015610e37575f5ffd5b505af1158015610e49573d5f5f3e3d5ffd5b50505050610ec5565b6001836002811115610e6657610e66612146565b03610ad1577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5858e610ea5856118dd565b866040518563ffffffff1660e01b8152600401610e20949392919061225d565b505050505b610ed4600160c955565b5050505050505050565b610ee6611697565b6108fc8282611403565b5f608e8383604051602001610f0793929190612302565b6040516020818303038152906040528051906020012090505b92915050565b610f2e6115f4565b5f818152609c602052604090205460ff16610f5c5760405163504570e360e01b815260040160405180910390fd5b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8698103610f9c576040516319920afd60e11b815260040160405180910390fd5b5f818152609c6020526040808220805460ff191690555182917f8bd43de1250f58fe6ec9a78671a8b78dba70f0018656d157a3aeaabec389df3491a250565b604080517f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc602082015290810184905263ffffffff8084166060830152821660808201525f9060a0016040516020818303038152906040528051906020012090509392505050565b5f61104d8161172e565b611055611759565b428363ffffffff16111561107c57604051635a119db560e11b815260040160405180910390fd5b60975463ffffffff620100009091048116908416116110ae5760405163037fa86b60e31b815260040160405180910390fd5b6110b9848484610fdb565b8560200135146110dc57604051638b56642d60e01b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050609754825192935061ffff16918391505f9061111757611117612329565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d79749061117c906098908b90879060040161245b565b6020604051808303815f875af1158015611198573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111bc91906121bd565b9050806111dc57604051633042041f60e21b815260040160405180910390fd5b6097805463ffffffff80881662010000810265ffffffff000019909316929092179092555f818152609a602090815260408083208054958a1663ffffffff1996871681179091558352609b825280832080549095168417909455828252609981528382208a9055898252609c9052828120805460ff19166001179055915188927f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a3505061128b600160c955565b5050505050565b61129a611697565b6001600160a01b0381166112ff5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610782565b61091181611375565b6113106118f3565b606654801982198116146113375760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b81609861141082826125e8565b5050604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90611460908690600401612679565b602060405180830381865afa15801561147b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061149f9190612181565b905063ffffffff8116156114c657604051636446f91760e01b815260040160405180910390fd5b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b9061151a9086906001908790609d90600401612687565b5f604051808303815f87803b158015611531575f5ffd5b505af1158015611543573d5f5f3e3d5ffd5b505050507f3463431b09dfd43dec7349f8f24acfa753fe4cf40a26235402d213373df15856836040516115769190612679565b60405180910390a1505050565b61271061ffff821611156115aa576040516307336f0360e11b815260040160405180910390fd5b6097805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f225929060200160405180910390a150565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611656573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167a91906121bd565b610a4e57604051631d77d47760e21b815260040160405180910390fd5b6033546001600160a01b03163314610a4e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610782565b60605f6116fd836119a4565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b606654600160ff83161b908116036109115760405163840a48d560e01b815260040160405180910390fd5b600260c954036117ab5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610782565b600260c955565b604080518082019091525f8082526020820152604080518082019091525f808252602082018190529060606117e985870187612760565b9299919850965090945092505050565b5f815f0151826020015163ffffffff1660405160200161184492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610f2090612825565b6118a483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff88166119cb565b61128b5760405163afa42ca760e01b815260040160405180910390fd5b6118c9611ac5565b81806020019051810190610f2091906128ad565b606081806020019051810190610f20919061295c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561194f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119739190612a5d565b6001600160a01b0316336001600160a01b031614610a4e5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610f2057604051632cd44ac360e21b815260040160405180910390fd5b5f836119ea576040516329e7276760e11b815260040160405180910390fd5b836119f6868585611a00565b1495945050505050565b5f83515f03611a105750816109b6565b60208451611a1e9190612a78565b15611a3c576040516313717da960e21b815260040160405180910390fd5b8260205b85518111611a9d57611a53600285612a78565b5f03611a7457815f528086015160205260405f209150600284049350611a8b565b808601515f528160205260405f2091506002840493505b611a96602082612a97565b9050611a40565b508215611abd576040516363df817160e01b815260040160405180910390fd5b949350505050565b60405180608001604052805f81526020015f8152602001611af760405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b0381168114610911575f5ffd5b5f60408284031215611b28575f5ffd5b50919050565b803561ffff81168114610aea575f5ffd5b5f60a08284031215611b28575f5ffd5b5f5f5f5f5f60c08688031215611b63575f5ffd5b8535611b6e81611b04565b945060208601359350611b848760408801611b18565b9250611b9260808701611b2e565b915060a08601356001600160401b03811115611bac575f5ffd5b611bb888828901611b3f565b9150509295509295909350565b5f60208284031215611bd5575f5ffd5b5035919050565b63ffffffff81168114610911575f5ffd5b5f60208284031215611bfd575f5ffd5b81356109b681611bdc565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610f208284611c08565b5f60208284031215611c44575f5ffd5b6109b682611b2e565b5f5f5f60608486031215611c5f575f5ffd5b833592506020840135611c7181611bdc565b91506040840135611c8181611bdc565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611cc257611cc2611c8c565b60405290565b604051608081016001600160401b0381118282101715611cc257611cc2611c8c565b604051601f8201601f191681016001600160401b0381118282101715611d1257611d12611c8c565b604052919050565b5f6001600160401b03821115611d3257611d32611c8c565b5060051b60200190565b5f60208284031215611d4c575f5ffd5b81356001600160401b03811115611d61575f5ffd5b82018084036060811215611d73575f5ffd5b611d7b611ca0565b6040821215611d88575f5ffd5b611d90611ca0565b83358152602080850135908201528152604083013591506001600160401b03821115611dba575f5ffd5b818301925085601f840112611dcd575f5ffd5b82359150611de2611ddd83611d1a565b611cea565b8083825260208201915060208460051b860101935087841115611e03575f5ffd5b6020850194505b83851015611e25578435825260209485019490910190611e0a565b60208301525095945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611e79575f5ffd5b813560ff811681146109b6575f5ffd5b803560038110610aea575f5ffd5b5f60208284031215611ea7575f5ffd5b6109b682611e89565b5f5f83601f840112611ec0575f5ffd5b5081356001600160401b03811115611ed6575f5ffd5b602083019150836020828501011115611eed575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611f0a575f5ffd5b8735611f1581611bdc565b9650602088013595506040880135611f2c81611bdc565b945060608801356001600160401b03811115611f46575f5ffd5b611f528a828b01611eb0565b90955093505060808801356001600160401b03811115611f70575f5ffd5b611f7c8a828b01611eb0565b989b979a50959850939692959293505050565b5f5f60608385031215611fa0575f5ffd5b611faa8484611b18565b915060408301356001600160401b03811115611fc4575f5ffd5b611fd085828601611b3f565b9150509250929050565b5f5f60208385031215611feb575f5ffd5b82356001600160401b03811115612000575f5ffd5b61200c85828601611eb0565b90969095509350505050565b5f5f5f5f6080858703121561202b575f5ffd5b84356001600160401b03811115612040575f5ffd5b85016101208188031215612052575f5ffd5b935060208501359250604085013561206981611bdc565b9150606085013561207981611bdc565b939692955090935050565b5f60208284031215612094575f5ffd5b81356109b681611b04565b5f602082840312156120af575f5ffd5b5051919050565b5f8151808452602084019350602083015f5b828110156120e65781518652602095860195909101906001016120c8565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611abd60808401826120b6565b60ff60f81b8360f81b1681525f82518060208501600185015e5f92016001019182525092915050565b634e487b7160e01b5f52602160045260245ffd5b60408101610f208284546001600160a01b038116825260a01c63ffffffff16602090910152565b5f60208284031215612191575f5ffd5b81516109b681611bdc565b606081016121aa8285611c08565b63ffffffff831660408301529392505050565b5f602082840312156121cd575f5ffd5b815180151581146109b6575f5ffd5b6121e68186611c08565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f604084015161222861010084018280518252602090810151910152565b50606084015160a06101408401526122446101608401826120b6565b9150506122546080830184611c08565b95945050505050565b5f60c0820161226c8388611c08565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156122ed5786850360df19018452815180516001600160a01b031686526020908101516040918701829052906122d7908701826120b6565b955050602093840193919091019060010161229c565b50505050809150506122546080830184611c08565b60f884901b6001600160f81b0319168152818360018301375f910160010190815292915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112612352575f5ffd5b83016020810192503590506001600160401b03811115612370575f5ffd5b8060051b3603821315611eed575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e198336030181126123bd575f5ffd5b90910192915050565b8183525f6001600160fb1b038311156123dd575f5ffd5b8260051b80836020870137939093016020019392505050565b80358252602080820135908301525f612412604083018361233d565b606060408601526122546060860182846123c6565b5f8151808452602084019350602083015f5b828110156120e657815161ffff16865260209586019590910190600101612439565b61247e8185546001600160a01b038116825260a01c63ffffffff16602090910152565b608060408201525f6101a08201843561249681611bdc565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c086016101408501376124e561010086018661233d565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b838110156125c7578786036101bf1901835261252482866123a9565b803561252f81611bdc565b63ffffffff168752602081013536829003601e1901811261254e575f5ffd5b81016020810190356001600160401b03811115612569575f5ffd5b803603821315612577575f5ffd5b606060208a015261258c60608a018284612381565b91505061259c60408301836123a9565b915087810360408901526125b081836123f6565b975050506020928301929190910190600101612508565b505050505082810360608401526125de8185612427565b9695505050505050565b81356125f381611b04565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561261f81611bdc565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b803561264f81611b04565b6001600160a01b03168252602081013561266881611bdc565b63ffffffff81166020840152505050565b60408101610f208284612644565b6126918186612644565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f6126df608085018561233d565b60a06101408501526126f6610160850182846123c6565b925050506122546080830184546001600160a01b038116825260a01c63ffffffff16602090910152565b5f60408284031215612730575f5ffd5b612738611ca0565b9050813561274581611b04565b8152602082013561275581611bdc565b602082015292915050565b5f5f5f5f60c08587031215612773575f5ffd5b61277d8686612720565b935061278b60408601611e89565b925061279a8660608701612720565b915060a08501356001600160401b038111156127b4575f5ffd5b8501601f810187136127c4575f5ffd5b80356001600160401b038111156127dd576127dd611c8c565b6127f0601f8201601f1916602001611cea565b818152886020838501011115612804575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b80516020808301519190811015611b28575f1960209190910360031b1b16919050565b5f82601f830112612857575f5ffd5b8151612865611ddd82611d1a565b8082825260208201915060208360051b860101925085831115612886575f5ffd5b602085015b838110156128a357805183526020928301920161288b565b5095945050505050565b5f602082840312156128bd575f5ffd5b81516001600160401b038111156128d2575f5ffd5b820180840360a08112156128e4575f5ffd5b6128ec611cc8565b82518152602080840151908201526040603f198301121561290b575f5ffd5b612913611ca0565b604084810151825260608501516020830152820152608083015191506001600160401b03821115612942575f5ffd5b61294e86838501612848565b606082015295945050505050565b5f6020828403121561296c575f5ffd5b81516001600160401b03811115612981575f5ffd5b8201601f81018413612991575f5ffd5b805161299f611ddd82611d1a565b8082825260208201915060208360051b8501019250868311156129c0575f5ffd5b602084015b83811015612a525780516001600160401b038111156129e2575f5ffd5b85016040818a03601f190112156129f7575f5ffd5b6129ff611ca0565b6020820151612a0d81611b04565b815260408201516001600160401b03811115612a27575f5ffd5b612a368b602083860101612848565b60208301525080855250506020830192506020810190506129c5565b509695505050505050565b5f60208284031215612a6d575f5ffd5b81516109b681611b04565b5f82612a9257634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610f2057634e487b7160e01b5f52601160045260245ffdfea2646970667358221220d811a65e6f7cd306cf4457908b23cea348ef78435edf74128c0f860fd70b5dc364736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"GENERATOR_GLOBAL_TABLE_ROOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENERATOR_MAX_STALENESS_PERIOD\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENERATOR_REFERENCE_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GLOBAL_TABLE_ROOT_CERT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_BPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_INFO_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPERATOR_TABLE_LEAF_SALT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"bn254CertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBN254CertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateOperatorInfoLeaf\",\"inputs\":[{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateOperatorTableLeaf\",\"inputs\":[{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"confirmGlobalTableRoot\",\"inputs\":[{\"name\":\"globalTableRootCert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ecdsaCertificateVerifier\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIECDSACertificateVerifier\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCertificateVerifier\",\"inputs\":[{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentGlobalTableRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGenerator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGeneratorConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structICrossChainRegistryTypes.OperatorSetConfig\",\"components\":[{\"name\":\"owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"maxStalenessPeriod\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGeneratorReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableRootByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateMessageHash\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getGlobalTableUpdateSignableDigest\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceBlockNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestReferenceTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceBlockNumberByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getReferenceTimestampByBlockNumber\",\"inputs\":[{\"name\":\"referenceBlockNumber\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"globalRootConfirmationThreshold\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_initialGenerator\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"_globalRootConfirmationThreshold\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"generatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isRootValid\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRootValidByTimestamp\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGlobalRootConfirmationThreshold\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateGenerator\",\"inputs\":[{\"name\":\"generator\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"generatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorSetInfo\",\"components\":[{\"name\":\"operatorInfoTreeRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"numOperators\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"aggregatePubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"totalWeights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"updateOperatorTable\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"operatorSetIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"proof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorTableBytes\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"GeneratorUpdated\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootConfirmationThresholdUpdated\",\"inputs\":[{\"name\":\"bps\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"GlobalRootDisabled\",\"inputs\":[{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"NewGlobalTableRoot\",\"inputs\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"globalTableRoot\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CannotDisableGeneratorRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CertificateInvalid\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"GlobalTableRootStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConfirmationThreshold\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenerator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGlobalTableRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TableUpdateForPastTimestamp\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b50604051612c1c380380612c1c83398101604081905261002e91610153565b8282826001600160a01b038116610058576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c052610078610080565b50505061019d565b5f54610100900460ff16156100eb5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161461013a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610150575f5ffd5b50565b5f5f5f60608486031215610165575f5ffd5b83516101708161013c565b60208501519093506101818161013c565b60408501519092506101928161013c565b809150509250925092565b60805160a05160c051612a086102145f395f818161059501528181610a5d0152610e2201525f81816105fc0152818161092101528181610a1d01528181610ac901528181610d7d015281816110f7015281816113e0015261149201525f818161051c015281816115be015261186d0152612a085ff3fe608060405234801561000f575f5ffd5b506004361061024a575f3560e01c80636f728c5011610140578063ad0f9582116100bf578063c3be1e3311610084578063c3be1e3314610652578063c5916a3914610665578063eaaed9d51461068a578063f2fde38b1461069d578063fabc1cbc146106b0578063fd967f47146106c3575f5ffd5b8063ad0f958214610590578063b0cb3a24146105b7578063b8c14306146105f7578063c252aa221461061e578063c3621f0a1461063f575f5ffd5b80638da5cb5b116101055780638da5cb5b1461053e5780639ea947781461054f5780639f7e206f14610562578063a2c902f514610575578063a2f2e24d1461057d575f5ffd5b80636f728c50146104d5578063715018a6146105005780637551ba3414610508578063790961ea14610510578063886f119514610517575f5ffd5b806331a599d2116101cc578063595c6a6711610191578063595c6a67146104655780635ac86ab71461046d5780635c975abb14610490578063612abcb01461049857806364e1df84146104a0575f5ffd5b806331a599d2146103df5780633ef6cd7a14610404578063401c370f1461042b5780634624e6a31461043e578063538a379014610452575f5ffd5b80631e2ca260116102125780631e2ca260146103075780632370356c1461035057806323b7b5b21461036357806328522d791461038b57806330ef41b4146103ad575f5ffd5b806306f518751461024e578063121409ea14610263578063136439dd14610282578063193b79f3146102955780631bdc0deb146102d2575b5f5ffd5b61026161025c366004611aa0565b6106cc565b005b61026b608e81565b60405160ff90911681526020015b60405180910390f35b610261610290366004611b16565b6108a6565b6102bd6102a3366004611b3e565b63ffffffff9081165f908152609b60205260409020541690565b60405163ffffffff9091168152602001610279565b6102f97fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a86981565b604051908152602001610279565b6040805180820182525f80825260209182015281518083019092526098546001600160a01b0381168352600160a01b900463ffffffff16908201525b6040516102799190611b77565b61026161035e366004611b85565b6108e0565b6102bd610371366004611b3e565b63ffffffff9081165f908152609a60205260409020541690565b60975462010000900463ffffffff165f908152609960205260409020546102f9565b6103cf6103bb366004611b16565b5f908152609c602052604090205460ff1690565b6040519015158152602001610279565b60975462010000900463ffffffff9081165f908152609a6020526040902054166102bd565b6102f97f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc81565b6102f9610439366004611b9e565b6108f4565b60975462010000900463ffffffff166102bd565b6102f9610460366004611c8d565b61099d565b6102616109ec565b6103cf61047b366004611d85565b606654600160ff9092169190911b9081161490565b6066546102f9565b6102bd600181565b6103cf6104ae366004611b3e565b63ffffffff165f908152609960209081526040808320548352609c90915290205460ff1690565b6104e86104e3366004611db3565b610a00565b6040516001600160a01b039091168152602001610279565b610261610a9f565b6102bd610ab0565b6102bd5f81565b6104e87f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b03166104e8565b61026161055d366004611e10565b610b43565b610261610570366004611eab565b610e93565b61026b607581565b6102f961058b366004611ef6565b610ea5565b6104e87f000000000000000000000000000000000000000000000000000000000000000081565b6040805180820182525f8082526020918201528151808301909252609d546001600160a01b0381168352600160a01b900463ffffffff1690820152610343565b6104e87f000000000000000000000000000000000000000000000000000000000000000081565b60975461062c9061ffff1681565b60405161ffff9091168152602001610279565b61026161064d366004611b16565b610edb565b6102f9610660366004611b9e565b610f90565b6102f9610673366004611b3e565b63ffffffff165f9081526099602052604090205490565b610261610698366004611f34565b610ff8565b6102616106ab366004611fa0565b611247565b6102616106be366004611b16565b6112bd565b61062c61271081565b5f54610100900460ff16158080156106ea57505f54600160ff909116105b806107035750303b15801561070357505f5460ff166001145b61076b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561078c575f805461ff0019166101001790555b6107958661132a565b61079e8561137b565b609d80546001600160c01b031916301790556107ba84836113b8565b6107c383611538565b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8697fbb86fbc034f4e382929974bcd8419ed626b0ea647f962d89ba2fb6bd28785ab98190555f52609c6020527f38353ab40115e4013d688e07cff5857dde443bd05e72c49fcb5e684a9bb9efc4805460ff19166001179055609780544263ffffffff16620100000265ffffffff000019909116179055801561089e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6108ae6115a9565b60665481811681146108d35760405163c61dca5d60e01b815260040160405180910390fd5b6108dc8261137b565b5050565b6108e861164c565b6108f181611538565b50565b5f5f610901858585610f90565b6040516306119d0d60e21b815260016004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631846743490604401602060405180830381865afa15801561096e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109929190611fbb565b9150505b9392505050565b5f6075826040516020016109b1919061200c565b60408051601f19818403018152908290526109cf9291602001612039565b604051602081830303815290604052805190602001209050919050565b6109f46115a9565b6109fe5f1961137b565b565b5f6002826002811115610a1557610a15612062565b03610a4157507f0000000000000000000000000000000000000000000000000000000000000000919050565b6001826002811115610a5557610a55612062565b03610a8157507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b919050565b610aa761164c565b6109fe5f61132a565b604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90610aff90609890600401612076565b602060405180830381865afa158015610b1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3e919061209d565b905090565b6001610b4e816116a6565b610b566116d1565b5f5f5f5f610b64878761172a565b5f8f8152609c60205260409020549397509195509350915060ff16610b9c5760405163504570e360e01b815260040160405180910390fd5b604080518082019091526098546001600160a01b0381168252600160a01b900463ffffffff166020820152610bd090611771565b610bd985611771565b03610bf757604051631fb1705560e21b815260040160405180910390fd5b610c0083610a00565b6001600160a01b031663cd83a72b858e6040518363ffffffff1660e01b8152600401610c2d9291906120b8565b602060405180830381865afa158015610c48573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6c91906120d9565b15610c7a5750505050610e7f565b610c8383610a00565b6001600160a01b0316635ddb9b5b856040518263ffffffff1660e01b8152600401610cae9190611b77565b602060405180830381865afa158015610cc9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ced919061209d565b63ffffffff168c63ffffffff1611610d185760405163207617df60e01b815260040160405180910390fd5b63ffffffff8c165f908152609960205260409020548b14610d4c5760405163639d09b560e11b815260040160405180910390fd5b610d628b8b8b8b610d5d8c8c610ea5565b6117d4565b6002836002811115610d7657610d76612062565b03610e07577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636738c40b858e610db585611839565b866040518563ffffffff1660e01b8152600401610dd594939291906120f8565b5f604051808303815f87803b158015610dec575f5ffd5b505af1158015610dfe573d5f5f3e3d5ffd5b50505050610e7a565b6001836002811115610e1b57610e1b612062565b03610a81577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166356d482f5858e610e5a85611855565b866040518563ffffffff1660e01b8152600401610dd59493929190612179565b505050505b610e89600160c955565b5050505050505050565b610e9b61164c565b6108dc82826113b8565b5f608e8383604051602001610ebc9392919061221e565b6040516020818303038152906040528051906020012090505b92915050565b610ee36115a9565b5f818152609c602052604090205460ff16610f115760405163504570e360e01b815260040160405180910390fd5b7fcefe99cb2e240b5f07de5cd472a75fc6e345370b73588ab161cb25c4a259a8698103610f51576040516319920afd60e11b815260040160405180910390fd5b5f818152609c6020526040808220805460ff191690555182917f8bd43de1250f58fe6ec9a78671a8b78dba70f0018656d157a3aeaabec389df3491a250565b604080517f4491f5ee91595f938885ef73c9a1fa8a6d14ff9b9dab4aa24b8802bbb9bfc1cc602082015290810184905263ffffffff8084166060830152821660808201525f9060a0016040516020818303038152906040528051906020012090509392505050565b5f611002816116a6565b61100a6116d1565b428363ffffffff16111561103157604051635a119db560e11b815260040160405180910390fd5b60975463ffffffff620100009091048116908416116110635760405163037fa86b60e31b815260040160405180910390fd5b61106e848484610f90565b85602001351461109157604051638b56642d60e01b815260040160405180910390fd5b6040805160018082528183019092525f91602080830190803683375050609754825192935061ffff16918391505f906110cc576110cc612245565b61ffff90921660209283029190910190910152604051625f5e5d60e21b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d797490611131906098908b908790600401612377565b6020604051808303815f875af115801561114d573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117191906120d9565b90508061119157604051633042041f60e21b815260040160405180910390fd5b6097805463ffffffff80881662010000810265ffffffff000019909316929092179092555f818152609a602090815260408083208054958a1663ffffffff1996871681179091558352609b825280832080549095168417909455828252609981528382208a9055898252609c9052828120805460ff19166001179055915188927f010dcbe0d1e019c93357711f7bb6287d543b7ff7de74f29df3fb5ecceec8d36991a35050611240600160c955565b5050505050565b61124f61164c565b6001600160a01b0381166112b45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610762565b6108f18161132a565b6112c561186b565b606654801982198116146112ec5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b8160986113c58282612504565b5050604051635ddb9b5b60e01b81525f906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635ddb9b5b90611415908690600401612595565b602060405180830381865afa158015611430573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611454919061209d565b905063ffffffff81161561147b57604051636446f91760e01b815260040160405180910390fd5b604051636738c40b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690636738c40b906114cf9086906001908790609d906004016125a3565b5f604051808303815f87803b1580156114e6575f5ffd5b505af11580156114f8573d5f5f3e3d5ffd5b505050507f3463431b09dfd43dec7349f8f24acfa753fe4cf40a26235402d213373df158568360405161152b9190612595565b60405180910390a1505050565b61271061ffff8216111561155f576040516307336f0360e11b815260040160405180910390fd5b6097805461ffff191661ffff83169081179091556040519081527ff5d1836df8fcd7c1e54047e94ac8773d2855395603e2ef9ba5f5f16905f225929060200160405180910390a150565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561160b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061162f91906120d9565b6109fe57604051631d77d47760e21b815260040160405180910390fd5b6033546001600160a01b031633146109fe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610762565b606654600160ff83161b908116036108f15760405163840a48d560e01b815260040160405180910390fd5b600260c954036117235760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610762565b600260c955565b604080518082019091525f8082526020820152604080518082019091525f808252602082018190529060606117618587018761267c565b9299919850965090945092505050565b5f815f0151826020015163ffffffff166040516020016117bc92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610ed590612741565b61181c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508591505063ffffffff881661191c565b6112405760405163afa42ca760e01b815260040160405180910390fd5b611841611a16565b81806020019051810190610ed591906127c9565b606081806020019051810190610ed59190612878565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118eb9190612979565b6001600160a01b0316336001600160a01b0316146109fe5760405163794821ff60e01b815260040160405180910390fd5b5f8361193b576040516329e7276760e11b815260040160405180910390fd5b83611947868585611951565b1495945050505050565b5f83515f03611961575081610996565b6020845161196f9190612994565b1561198d576040516313717da960e21b815260040160405180910390fd5b8260205b855181116119ee576119a4600285612994565b5f036119c557815f528086015160205260405f2091506002840493506119dc565b808601515f528160205260405f2091506002840493505b6119e76020826129b3565b9050611991565b508215611a0e576040516363df817160e01b815260040160405180910390fd5b949350505050565b60405180608001604052805f81526020015f8152602001611a4860405180604001604052805f81526020015f81525090565b8152602001606081525090565b6001600160a01b03811681146108f1575f5ffd5b5f60408284031215611a79575f5ffd5b50919050565b803561ffff81168114610a9a575f5ffd5b5f60a08284031215611a79575f5ffd5b5f5f5f5f5f60c08688031215611ab4575f5ffd5b8535611abf81611a55565b945060208601359350611ad58760408801611a69565b9250611ae360808701611a7f565b915060a08601356001600160401b03811115611afd575f5ffd5b611b0988828901611a90565b9150509295509295909350565b5f60208284031215611b26575f5ffd5b5035919050565b63ffffffff811681146108f1575f5ffd5b5f60208284031215611b4e575f5ffd5b813561099681611b2d565b80516001600160a01b0316825260209081015163ffffffff16910152565b60408101610ed58284611b59565b5f60208284031215611b95575f5ffd5b61099682611a7f565b5f5f5f60608486031215611bb0575f5ffd5b833592506020840135611bc281611b2d565b91506040840135611bd281611b2d565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715611c1357611c13611bdd565b60405290565b604051608081016001600160401b0381118282101715611c1357611c13611bdd565b604051601f8201601f191681016001600160401b0381118282101715611c6357611c63611bdd565b604052919050565b5f6001600160401b03821115611c8357611c83611bdd565b5060051b60200190565b5f60208284031215611c9d575f5ffd5b81356001600160401b03811115611cb2575f5ffd5b82018084036060811215611cc4575f5ffd5b611ccc611bf1565b6040821215611cd9575f5ffd5b611ce1611bf1565b83358152602080850135908201528152604083013591506001600160401b03821115611d0b575f5ffd5b818301925085601f840112611d1e575f5ffd5b82359150611d33611d2e83611c6b565b611c3b565b8083825260208201915060208460051b860101935087841115611d54575f5ffd5b6020850194505b83851015611d76578435825260209485019490910190611d5b565b60208301525095945050505050565b5f60208284031215611d95575f5ffd5b813560ff81168114610996575f5ffd5b803560038110610a9a575f5ffd5b5f60208284031215611dc3575f5ffd5b61099682611da5565b5f5f83601f840112611ddc575f5ffd5b5081356001600160401b03811115611df2575f5ffd5b602083019150836020828501011115611e09575f5ffd5b9250929050565b5f5f5f5f5f5f5f60a0888a031215611e26575f5ffd5b8735611e3181611b2d565b9650602088013595506040880135611e4881611b2d565b945060608801356001600160401b03811115611e62575f5ffd5b611e6e8a828b01611dcc565b90955093505060808801356001600160401b03811115611e8c575f5ffd5b611e988a828b01611dcc565b989b979a50959850939692959293505050565b5f5f60608385031215611ebc575f5ffd5b611ec68484611a69565b915060408301356001600160401b03811115611ee0575f5ffd5b611eec85828601611a90565b9150509250929050565b5f5f60208385031215611f07575f5ffd5b82356001600160401b03811115611f1c575f5ffd5b611f2885828601611dcc565b90969095509350505050565b5f5f5f5f60808587031215611f47575f5ffd5b84356001600160401b03811115611f5c575f5ffd5b85016101208188031215611f6e575f5ffd5b9350602085013592506040850135611f8581611b2d565b91506060850135611f9581611b2d565b939692955090935050565b5f60208284031215611fb0575f5ffd5b813561099681611a55565b5f60208284031215611fcb575f5ffd5b5051919050565b5f8151808452602084019350602083015f5b82811015612002578151865260209586019590910190600101611fe4565b5093949350505050565b60208082528251805183830152015160408201525f6020830151606080840152611a0e6080840182611fd2565b60ff60f81b8360f81b1681525f82518060208501600185015e5f92016001019182525092915050565b634e487b7160e01b5f52602160045260245ffd5b60408101610ed58284546001600160a01b038116825260a01c63ffffffff16602090910152565b5f602082840312156120ad575f5ffd5b815161099681611b2d565b606081016120c68285611b59565b63ffffffff831660408301529392505050565b5f602082840312156120e9575f5ffd5b81518015158114610996575f5ffd5b6121028186611b59565b63ffffffff8416604082015260c06060820152825160c0820152602083015160e08201525f604084015161214461010084018280518252602090810151910152565b50606084015160a0610140840152612160610160840182611fd2565b9150506121706080830184611b59565b95945050505050565b5f60c082016121888388611b59565b63ffffffff8616604084015260c0606084015280855180835260e08501915060e08160051b8601019250602087015f5b828110156122095786850360df19018452815180516001600160a01b031686526020908101516040918701829052906121f390870182611fd2565b95505060209384019391909101906001016121b8565b50505050809150506121706080830184611b59565b60f884901b6001600160f81b0319168152818360018301375f910160010190815292915050565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e1984360301811261226e575f5ffd5b83016020810192503590506001600160401b0381111561228c575f5ffd5b8060051b3603821315611e09575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8235605e198336030181126122d9575f5ffd5b90910192915050565b8183525f6001600160fb1b038311156122f9575f5ffd5b8260051b80836020870137939093016020019392505050565b80358252602080820135908301525f61232e6040830183612259565b606060408601526121706060860182846122e2565b5f8151808452602084019350602083015f5b8281101561200257815161ffff16865260209586019590910190600101612355565b61239a8185546001600160a01b038116825260a01c63ffffffff16602090910152565b608060408201525f6101a0820184356123b281611b2d565b63ffffffff166080840152602085013560a0840152604085013560c0840152606085013560e0840152604060808601610100850137604060c08601610140850137612401610100860186612259565b610120610180860152828184526101c0860190506101c08260051b8701019350825f5b838110156124e3578786036101bf1901835261244082866122c5565b803561244b81611b2d565b63ffffffff168752602081013536829003601e1901811261246a575f5ffd5b81016020810190356001600160401b03811115612485575f5ffd5b803603821315612493575f5ffd5b606060208a01526124a860608a01828461229d565b9150506124b860408301836122c5565b915087810360408901526124cc8183612312565b975050506020928301929190910190600101612424565b505050505082810360608401526124fa8185612343565b9695505050505050565b813561250f81611a55565b81546001600160a01b031981166001600160a01b03929092169182178355602084013561253b81611b2d565b6001600160c01b03199190911690911760a09190911b63ffffffff60a01b1617905550565b803561256b81611a55565b6001600160a01b03168252602081013561258481611b2d565b63ffffffff81166020840152505050565b60408101610ed58284612560565b6125ad8186612560565b63ffffffff841660408281019190915260c06060808401829052853591840191909152602085013560e0840152908401356101008301528301356101208201525f6125fb6080850185612259565b60a0610140850152612612610160850182846122e2565b925050506121706080830184546001600160a01b038116825260a01c63ffffffff16602090910152565b5f6040828403121561264c575f5ffd5b612654611bf1565b9050813561266181611a55565b8152602082013561267181611b2d565b602082015292915050565b5f5f5f5f60c0858703121561268f575f5ffd5b612699868661263c565b93506126a760408601611da5565b92506126b6866060870161263c565b915060a08501356001600160401b038111156126d0575f5ffd5b8501601f810187136126e0575f5ffd5b80356001600160401b038111156126f9576126f9611bdd565b61270c601f8201601f1916602001611c3b565b818152886020838501011115612720575f5ffd5b816020840160208301375f6020838301015280935050505092959194509250565b80516020808301519190811015611a79575f1960209190910360031b1b16919050565b5f82601f830112612773575f5ffd5b8151612781611d2e82611c6b565b8082825260208201915060208360051b8601019250858311156127a2575f5ffd5b602085015b838110156127bf5780518352602092830192016127a7565b5095945050505050565b5f602082840312156127d9575f5ffd5b81516001600160401b038111156127ee575f5ffd5b820180840360a0811215612800575f5ffd5b612808611c19565b82518152602080840151908201526040603f1983011215612827575f5ffd5b61282f611bf1565b604084810151825260608501516020830152820152608083015191506001600160401b0382111561285e575f5ffd5b61286a86838501612764565b606082015295945050505050565b5f60208284031215612888575f5ffd5b81516001600160401b0381111561289d575f5ffd5b8201601f810184136128ad575f5ffd5b80516128bb611d2e82611c6b565b8082825260208201915060208360051b8501019250868311156128dc575f5ffd5b602084015b8381101561296e5780516001600160401b038111156128fe575f5ffd5b85016040818a03601f19011215612913575f5ffd5b61291b611bf1565b602082015161292981611a55565b815260408201516001600160401b03811115612943575f5ffd5b6129528b602083860101612764565b60208301525080855250506020830192506020810190506128e1565b509695505050505050565b5f60208284031215612989575f5ffd5b815161099681611a55565b5f826129ae57634e487b7160e01b5f52601260045260245ffd5b500690565b80820180821115610ed557634e487b7160e01b5f52601160045260245ffdfea2646970667358221220240ad301da8b77f9c106ebe3947011bb74091956af5628b16f9becbfbcf9302864736f6c634300081e0033", } // OperatorTableUpdaterABI is the input ABI used to generate the binding from. @@ -98,7 +98,7 @@ var OperatorTableUpdaterABI = OperatorTableUpdaterMetaData.ABI var OperatorTableUpdaterBin = OperatorTableUpdaterMetaData.Bin // DeployOperatorTableUpdater deploys a new Ethereum contract, binding an instance of OperatorTableUpdater to it. -func DeployOperatorTableUpdater(auth *bind.TransactOpts, backend bind.ContractBackend, _bn254CertificateVerifier common.Address, _ecdsaCertificateVerifier common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *OperatorTableUpdater, error) { +func DeployOperatorTableUpdater(auth *bind.TransactOpts, backend bind.ContractBackend, _bn254CertificateVerifier common.Address, _ecdsaCertificateVerifier common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *OperatorTableUpdater, error) { parsed, err := OperatorTableUpdaterMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -107,7 +107,7 @@ func DeployOperatorTableUpdater(auth *bind.TransactOpts, backend bind.ContractBa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OperatorTableUpdaterBin), backend, _bn254CertificateVerifier, _ecdsaCertificateVerifier, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(OperatorTableUpdaterBin), backend, _bn254CertificateVerifier, _ecdsaCertificateVerifier, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -1186,37 +1186,6 @@ func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) PauserRegistry() return _OperatorTableUpdater.Contract.PauserRegistry(&_OperatorTableUpdater.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OperatorTableUpdater *OperatorTableUpdaterCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _OperatorTableUpdater.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OperatorTableUpdater *OperatorTableUpdaterSession) Version() (string, error) { - return _OperatorTableUpdater.Contract.Version(&_OperatorTableUpdater.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_OperatorTableUpdater *OperatorTableUpdaterCallerSession) Version() (string, error) { - return _OperatorTableUpdater.Contract.Version(&_OperatorTableUpdater.CallOpts) -} - // ConfirmGlobalTableRoot is a paid mutator transaction binding the contract method 0xeaaed9d5. // // Solidity: function confirmGlobalTableRoot((uint32,bytes32,(uint256,uint256),(uint256[2],uint256[2]),(uint32,bytes,((uint256,uint256),uint256[]))[]) globalTableRootCert, bytes32 globalTableRoot, uint32 referenceTimestamp, uint32 referenceBlockNumber) returns() diff --git a/pkg/bindings/PauserRegistry/binding.go b/pkg/bindings/PauserRegistry/binding.go index dfb7ea4084..b716416eb2 100644 --- a/pkg/bindings/PauserRegistry/binding.go +++ b/pkg/bindings/PauserRegistry/binding.go @@ -32,7 +32,7 @@ var ( // PauserRegistryMetaData contains all meta data concerning the PauserRegistry contract. var PauserRegistryMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_pausers\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"_unpauser\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isPauser\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setIsPauser\",\"inputs\":[{\"name\":\"newPauser\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"canPause\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnpauser\",\"inputs\":[{\"name\":\"newUnpauser\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpauser\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"PauserStatusChanged\",\"inputs\":[{\"name\":\"pauser\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"canPause\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UnpauserChanged\",\"inputs\":[{\"name\":\"previousUnpauser\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newUnpauser\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]}]", - Bin: "0x608060405234801561000f575f5ffd5b506040516105c83803806105c883398101604081905261002e916101c2565b5f5b825181101561006b5761006383828151811061004e5761004e61029e565b6020026020010151600161007c60201b60201c565b600101610030565b5061007581610103565b50506102b2565b6001600160a01b0382166100a3576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661012a576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b03811681146101bd575f5ffd5b919050565b5f5f604083850312156101d3575f5ffd5b82516001600160401b038111156101e8575f5ffd5b8301601f810185136101f8575f5ffd5b80516001600160401b0381111561021157610211610193565b604051600582901b90603f8201601f191681016001600160401b038111828210171561023f5761023f610193565b60405291825260208184018101929081018884111561025c575f5ffd5b6020850194505b8385101561028257610274856101a7565b815260209485019401610263565b50945061029592505050602084016101a7565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b610309806102bf5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220912d9aab30be938dab3ebca2aa9bf6b6198fb6a29afd7dcf21e3a0efc0574d9c64736f6c634300081b0033", + Bin: "0x608060405234801561000f575f5ffd5b506040516105c83803806105c883398101604081905261002e916101c2565b5f5b825181101561006b5761006383828151811061004e5761004e61029e565b6020026020010151600161007c60201b60201c565b600101610030565b5061007581610103565b50506102b2565b6001600160a01b0382166100a3576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b03811661012a576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b5f52604160045260245ffd5b80516001600160a01b03811681146101bd575f5ffd5b919050565b5f5f604083850312156101d3575f5ffd5b82516001600160401b038111156101e8575f5ffd5b8301601f810185136101f8575f5ffd5b80516001600160401b0381111561021157610211610193565b604051600582901b90603f8201601f191681016001600160401b038111828210171561023f5761023f610193565b60405291825260208184018101929081018884111561025c575f5ffd5b6020850194505b8385101561028257610274856101a7565b815260209485019401610263565b50945061029592505050602084016101a7565b90509250929050565b634e487b7160e01b5f52603260045260245ffd5b610309806102bf5f395ff3fe608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea26469706673582212205fbfc4bf9fde16fd8b6bb6cfaee6c9267e9bc7fe7ddce99f07e29deb6da1681c64736f6c634300081e0033", } // PauserRegistryABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/PermissionController/binding.go b/pkg/bindings/PermissionController/binding.go index db53a9ade5..8f6ba46e7c 100644 --- a/pkg/bindings/PermissionController/binding.go +++ b/pkg/bindings/PermissionController/binding.go @@ -31,8 +31,8 @@ var ( // PermissionControllerMetaData contains all meta data concerning the PermissionController contract. var PermissionControllerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60a060405234801561000f575f5ffd5b506040516112b73803806112b783398101604081905261002e9161015c565b806100388161004a565b60805250610044610090565b50610267565b5f5f829050601f8151111561007d578260405163305a27a960e01b8152600401610074919061020c565b60405180910390fd5b805161008882610241565b179392505050565b5f54610100900460ff16156100f75760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610074565b5f5460ff90811614610146575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f6020828403121561016c575f5ffd5b81516001600160401b03811115610181575f5ffd5b8201601f81018413610191575f5ffd5b80516001600160401b038111156101aa576101aa610148565b604051601f8201601f19908116603f011681016001600160401b03811182821017156101d8576101d8610148565b6040528181528282016020018610156101ef575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610261575f198160200360031b1b821691505b50919050565b60805161103861027f5f395f6104d101526110385ff3fe608060405234801561000f575f5ffd5b50600436106100e5575f3560e01c80639100674511610088578063ad8aca7711610063578063ad8aca77146101df578063df595cb8146101f2578063eb5a4e8714610205578063fddbdefd14610218575f5ffd5b80639100674514610196578063950d806e146101b9578063ad5f2210146101cc575f5ffd5b806354fd4d50116100c357806354fd4d5014610124578063628806ef146101425780636bddfa1f14610155578063882a3b3814610175575f5ffd5b806306641201146100e9578063268959e5146100fe5780634f906cf914610111575b5f5ffd5b6100fc6100f7366004610dbd565b61022b565b005b6100fc61010c366004610e0e565b61034c565b6100fc61011f366004610e0e565b610427565b61012c6104ca565b6040516101399190610e3f565b60405180910390f35b6100fc610150366004610e74565b6104fa565b610168610163366004610e74565b610588565b6040516101399190610ed0565b610188610183366004610e0e565b6105b1565b604051610139929190610ee2565b6101a96101a4366004610e0e565b610712565b6040519015158152602001610139565b6100fc6101c7366004610dbd565b610782565b6101686101da366004610e74565b610893565b6101a96101ed366004610e0e565b610939565b6101a9610200366004610dbd565b61095a565b6100fc610213366004610e0e565b6109af565b610168610226366004610f44565b610a7d565b836102368133610712565b61025357604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906102758585610abb565b6001600160a01b0387165f908152600484016020526040902090915061029b9082610ae8565b6102b85760405163262118cd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206102db9082610aff565b505f81815260058301602052604090206102f59087610b0a565b50856001600160a01b0316876001600160a01b03167f18242326b6b862126970679759169f01f646bd55ec5bfcab85ba9f337a74e0c6878760405161033b929190610f84565b60405180910390a350505050505050565b816103578133610712565b61037457604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602081905260409091206002019061039b82610b1e565b116103b9576040516310ce892b60e31b815260040160405180910390fd5b6103c38184610b0a565b6103e057604051630716d81b60e51b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce906020015b60405180910390a250505050565b816104328133610712565b61044f57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206104708184610b0a565b61048d5760405163bed8295f60e01b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fd706ed7ae044d795b49e54c9f519f663053951011985f663a862cd9ee72a9ac790602001610419565b60606104f57f0000000000000000000000000000000000000000000000000000000000000000610b27565b905090565b6001600160a01b0381165f90815260016020526040902061051b8133610b0a565b6105385760405163bed8295f60e01b815260040160405180910390fd5b6105456002820133610b64565b506040513381526001600160a01b038316907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff979060200160405180910390a25050565b6001600160a01b0381165f9081526001602052604090206060906105ab90610b78565b92915050565b6001600160a01b038083165f9081526001602090815260408083209385168352600490930190529081206060918291906105ea82610b1e565b90505f8167ffffffffffffffff81111561060657610606610fa7565b60405190808252806020026020018201604052801561062f578160200160208202803683370190505b5090505f8267ffffffffffffffff81111561064c5761064c610fa7565b604051908082528060200260200182016040528015610675578160200160208202803683370190505b5090505f5b83811015610704576106a861068f8683610b84565b606081901c9160a09190911b6001600160e01b03191690565b8483815181106106ba576106ba610fbb565b602002602001018484815181106106d3576106d3610fbb565b6001600160e01b0319909316602093840291909101909201919091526001600160a01b03909116905260010161067a565b509097909650945050505050565b6001600160a01b0382165f90815260016020526040812061073590600201610b1e565b5f0361075757816001600160a01b0316836001600160a01b03161490506105ab565b6001600160a01b0383165f90815260016020526040902061077b9060020183610b8f565b9392505050565b8361078d8133610712565b6107aa57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906107cc8585610abb565b6001600160a01b0387165f90815260048401602052604090209091506107f29082610ae8565b156108105760405163ad8efeb760e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206108339082610bb0565b505f818152600583016020526040902061084d9087610b64565b50856001600160a01b0316876001600160a01b03167f037f03a2ad6b967df4a01779b6d2b4c85950df83925d9e31362b519422fc0169878760405161033b929190610f84565b6001600160a01b0381165f9081526001602052604090206060906108b990600201610b1e565b5f03610911576040805160018082528183019092525f916020808301908036833701905050905082815f815181106108f3576108f3610fbb565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b0382165f9081526001602052604090206105ab90600201610b78565b919050565b6001600160a01b0382165f90815260016020526040812061077b9083610b8f565b5f6109658585610712565b806109a657506109a66109788484610abb565b6001600160a01b038088165f908152600160209081526040808320938a168352600490930190522090610ae8565b95945050505050565b816109ba8133610712565b6109d757604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206109fb6002820184610b8f565b15610a195760405163130160e560e31b815260040160405180910390fd5b610a238184610b64565b610a40576040516319abede360e11b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fb14b9a3d448c5b04f0e5b087b6f5193390db7955482a6ffb841e7b3ba61a460c90602001610419565b60605f610a8a8484610abb565b6001600160a01b0386165f90815260016020908152604080832084845260050190915290209091506109a690610b78565b60609190911b6bffffffffffffffffffffffff191660a09190911c6bffffffff0000000000000000161790565b5f818152600183016020526040812054151561077b565b5f61077b8383610bbb565b5f61077b836001600160a01b038416610bbb565b5f6105ab825490565b60605f610b3383610c9e565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f61077b836001600160a01b038416610cc5565b60605f61077b83610d11565b5f61077b8383610d6a565b6001600160a01b0381165f908152600183016020526040812054151561077b565b5f61077b8383610cc5565b5f8181526001830160205260408120548015610c95575f610bdd600183610fcf565b85549091505f90610bf090600190610fcf565b9050818114610c4f575f865f018281548110610c0e57610c0e610fbb565b905f5260205f200154905080875f018481548110610c2e57610c2e610fbb565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610c6057610c60610fee565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105ab565b5f9150506105ab565b5f60ff8216601f8111156105ab57604051632cd44ac360e21b815260040160405180910390fd5b5f818152600183016020526040812054610d0a57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105ab565b505f6105ab565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610d5e57602002820191905f5260205f20905b815481526020019060010190808311610d4a575b50505050509050919050565b5f825f018281548110610d7f57610d7f610fbb565b905f5260205f200154905092915050565b80356001600160a01b0381168114610934575f5ffd5b80356001600160e01b031981168114610934575f5ffd5b5f5f5f5f60808587031215610dd0575f5ffd5b610dd985610d90565b9350610de760208601610d90565b9250610df560408601610d90565b9150610e0360608601610da6565b905092959194509250565b5f5f60408385031215610e1f575f5ffd5b610e2883610d90565b9150610e3660208401610d90565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215610e84575f5ffd5b61077b82610d90565b5f8151808452602084019350602083015f5b82811015610ec65781516001600160a01b0316865260209586019590910190600101610e9f565b5093949350505050565b602081525f61077b6020830184610e8d565b604081525f610ef46040830185610e8d565b82810360208401528084518083526020830191506020860192505f5b81811015610f385783516001600160e01b031916835260209384019390920191600101610f10565b50909695505050505050565b5f5f5f60608486031215610f56575f5ffd5b610f5f84610d90565b9250610f6d60208501610d90565b9150610f7b60408501610da6565b90509250925092565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b818103818111156105ab57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea26469706673582212200bfef99c3a205d60791c555845f86aa8d73ec426628fe8d9ce32ca87c87a311f64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]}]", + Bin: "0x6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b610f40806100e05f395ff3fe608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c80639100674511610088578063ad8aca7711610063578063ad8aca77146101b0578063df595cb8146101c3578063eb5a4e87146101d6578063fddbdefd146101e9575f5ffd5b80639100674514610167578063950d806e1461018a578063ad5f22101461019d575f5ffd5b806306641201146100cf578063268959e5146100e45780634f906cf9146100f7578063628806ef1461010a5780636bddfa1f1461011d578063882a3b3814610146575b5f5ffd5b6100e26100dd366004610cfa565b6101fc565b005b6100e26100f2366004610d4b565b61031d565b6100e2610105366004610d4b565b6103f8565b6100e2610118366004610d7c565b61049b565b61013061012b366004610d7c565b610529565b60405161013d9190610dd8565b60405180910390f35b610159610154366004610d4b565b610552565b60405161013d929190610dea565b61017a610175366004610d4b565b6106b3565b604051901515815260200161013d565b6100e2610198366004610cfa565b610723565b6101306101ab366004610d7c565b610834565b61017a6101be366004610d4b565b6108da565b61017a6101d1366004610cfa565b6108fb565b6100e26101e4366004610d4b565b610950565b6101306101f7366004610e4c565b610a1e565b8361020781336106b3565b61022457604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f908152600160205260408120906102468585610a5c565b6001600160a01b0387165f908152600484016020526040902090915061026c9082610a89565b6102895760405163262118cd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206102ac9082610aa0565b505f81815260058301602052604090206102c69087610aab565b50856001600160a01b0316876001600160a01b03167f18242326b6b862126970679759169f01f646bd55ec5bfcab85ba9f337a74e0c6878760405161030c929190610e8c565b60405180910390a350505050505050565b8161032881336106b3565b61034557604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602081905260409091206002019061036c82610abf565b1161038a576040516310ce892b60e31b815260040160405180910390fd5b6103948184610aab565b6103b157604051630716d81b60e51b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fdb9d5d31320daf5bc7181d565b6da4d12e30f0f4d5aa324a992426c14a1d19ce906020015b60405180910390a250505050565b8161040381336106b3565b61042057604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f9081526001602052604090206104418184610aab565b61045e5760405163bed8295f60e01b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fd706ed7ae044d795b49e54c9f519f663053951011985f663a862cd9ee72a9ac7906020016103ea565b6001600160a01b0381165f9081526001602052604090206104bc8133610aab565b6104d95760405163bed8295f60e01b815260040160405180910390fd5b6104e66002820133610ac8565b506040513381526001600160a01b038316907fbf265e8326285a2747e33e54d5945f7111f2b5edb826eb8c08d4677779b3ff979060200160405180910390a25050565b6001600160a01b0381165f90815260016020526040902060609061054c90610adc565b92915050565b6001600160a01b038083165f90815260016020908152604080832093851683526004909301905290812060609182919061058b82610abf565b90505f8167ffffffffffffffff8111156105a7576105a7610eaf565b6040519080825280602002602001820160405280156105d0578160200160208202803683370190505b5090505f8267ffffffffffffffff8111156105ed576105ed610eaf565b604051908082528060200260200182016040528015610616578160200160208202803683370190505b5090505f5b838110156106a5576106496106308683610ae8565b606081901c9160a09190911b6001600160e01b03191690565b84838151811061065b5761065b610ec3565b6020026020010184848151811061067457610674610ec3565b6001600160e01b0319909316602093840291909101909201919091526001600160a01b03909116905260010161061b565b509097909650945050505050565b6001600160a01b0382165f9081526001602052604081206106d690600201610abf565b5f036106f857816001600160a01b0316836001600160a01b031614905061054c565b6001600160a01b0383165f90815260016020526040902061071c9060020183610af3565b9392505050565b8361072e81336106b3565b61074b57604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0385165f9081526001602052604081209061076d8585610a5c565b6001600160a01b0387165f90815260048401602052604090209091506107939082610a89565b156107b15760405163ad8efeb760e01b815260040160405180910390fd5b6001600160a01b0386165f90815260048301602052604090206107d49082610b14565b505f81815260058301602052604090206107ee9087610ac8565b50856001600160a01b0316876001600160a01b03167f037f03a2ad6b967df4a01779b6d2b4c85950df83925d9e31362b519422fc0169878760405161030c929190610e8c565b6001600160a01b0381165f90815260016020526040902060609061085a90600201610abf565b5f036108b2576040805160018082528183019092525f916020808301908036833701905050905082815f8151811061089457610894610ec3565b6001600160a01b039092166020928302919091019091015292915050565b6001600160a01b0382165f90815260016020526040902061054c90600201610adc565b919050565b6001600160a01b0382165f90815260016020526040812061071c9083610af3565b5f61090685856106b3565b8061094757506109476109198484610a5c565b6001600160a01b038088165f908152600160209081526040808320938a168352600490930190522090610a89565b95945050505050565b8161095b81336106b3565b61097857604051637bfa4b9f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260016020526040902061099c6002820184610af3565b156109ba5760405163130160e560e31b815260040160405180910390fd5b6109c48184610ac8565b6109e1576040516319abede360e11b815260040160405180910390fd5b6040516001600160a01b0384811682528516907fb14b9a3d448c5b04f0e5b087b6f5193390db7955482a6ffb841e7b3ba61a460c906020016103ea565b60605f610a2b8484610a5c565b6001600160a01b0386165f908152600160209081526040808320848452600501909152902090915061094790610adc565b60609190911b6bffffffffffffffffffffffff191660a09190911c6bffffffff0000000000000000161790565b5f818152600183016020526040812054151561071c565b5f61071c8383610b1f565b5f61071c836001600160a01b038416610b1f565b5f61054c825490565b5f61071c836001600160a01b038416610c02565b60605f61071c83610c4e565b5f61071c8383610ca7565b6001600160a01b0381165f908152600183016020526040812054151561071c565b5f61071c8383610c02565b5f8181526001830160205260408120548015610bf9575f610b41600183610ed7565b85549091505f90610b5490600190610ed7565b9050818114610bb3575f865f018281548110610b7257610b72610ec3565b905f5260205f200154905080875f018481548110610b9257610b92610ec3565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080610bc457610bc4610ef6565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061054c565b5f91505061054c565b5f818152600183016020526040812054610c4757508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561054c565b505f61054c565b6060815f01805480602002602001604051908101604052809291908181526020018280548015610c9b57602002820191905f5260205f20905b815481526020019060010190808311610c87575b50505050509050919050565b5f825f018281548110610cbc57610cbc610ec3565b905f5260205f200154905092915050565b80356001600160a01b03811681146108d5575f5ffd5b80356001600160e01b0319811681146108d5575f5ffd5b5f5f5f5f60808587031215610d0d575f5ffd5b610d1685610ccd565b9350610d2460208601610ccd565b9250610d3260408601610ccd565b9150610d4060608601610ce3565b905092959194509250565b5f5f60408385031215610d5c575f5ffd5b610d6583610ccd565b9150610d7360208401610ccd565b90509250929050565b5f60208284031215610d8c575f5ffd5b61071c82610ccd565b5f8151808452602084019350602083015f5b82811015610dce5781516001600160a01b0316865260209586019590910190600101610da7565b5093949350505050565b602081525f61071c6020830184610d95565b604081525f610dfc6040830185610d95565b82810360208401528084518083526020830191506020860192505f5b81811015610e405783516001600160e01b031916835260209384019390920191600101610e18565b50909695505050505050565b5f5f5f60608486031215610e5e575f5ffd5b610e6784610ccd565b9250610e7560208501610ccd565b9150610e8360408501610ce3565b90509250925092565b6001600160a01b039290921682526001600160e01b031916602082015260400190565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8181038181111561054c57634e487b7160e01b5f52601160045260245ffd5b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220dd650b83bee83e06b0a5e74e02601ad7567945febdeb94d505c6ccb7cb59e28c64736f6c634300081e0033", } // PermissionControllerABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var PermissionControllerABI = PermissionControllerMetaData.ABI var PermissionControllerBin = PermissionControllerMetaData.Bin // DeployPermissionController deploys a new Ethereum contract, binding an instance of PermissionController to it. -func DeployPermissionController(auth *bind.TransactOpts, backend bind.ContractBackend, _version string) (common.Address, *types.Transaction, *PermissionController, error) { +func DeployPermissionController(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *PermissionController, error) { parsed, err := PermissionControllerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployPermissionController(auth *bind.TransactOpts, backend bind.ContractBa return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PermissionControllerBin), backend, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(PermissionControllerBin), backend) if err != nil { return common.Address{}, nil, nil, err } @@ -420,37 +420,6 @@ func (_PermissionController *PermissionControllerCallerSession) IsPendingAdmin(a return _PermissionController.Contract.IsPendingAdmin(&_PermissionController.CallOpts, account, pendingAdmin) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionController *PermissionControllerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _PermissionController.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionController *PermissionControllerSession) Version() (string, error) { - return _PermissionController.Contract.Version(&_PermissionController.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionController *PermissionControllerCallerSession) Version() (string, error) { - return _PermissionController.Contract.Version(&_PermissionController.CallOpts) -} - // AcceptAdmin is a paid mutator transaction binding the contract method 0x628806ef. // // Solidity: function acceptAdmin(address account) returns() diff --git a/pkg/bindings/PermissionControllerStorage/binding.go b/pkg/bindings/PermissionControllerStorage/binding.go index 80c70e6ce3..14a672e750 100644 --- a/pkg/bindings/PermissionControllerStorage/binding.go +++ b/pkg/bindings/PermissionControllerStorage/binding.go @@ -31,7 +31,7 @@ var ( // PermissionControllerStorageMetaData contains all meta data concerning the PermissionControllerStorage contract. var PermissionControllerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"acceptAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"canCall\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointeePermissions\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"bytes4[]\",\"internalType\":\"bytes4[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAppointees\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingAdmins\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"caller\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isPendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pendingAdmin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removePendingAdmin\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setAppointee\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"internalType\":\"bytes4\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AdminSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"AppointeeSet\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"appointee\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"target\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"selector\",\"type\":\"bytes4\",\"indexed\":false,\"internalType\":\"bytes4\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminAdded\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"PendingAdminRemoved\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"admin\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AdminAlreadyPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AdminNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeAlreadySet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AppointeeNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CannotHaveZeroAdmins\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NotAdmin\",\"inputs\":[]}]", } // PermissionControllerStorageABI is the input ABI used to generate the binding from. @@ -180,6 +180,37 @@ func (_PermissionControllerStorage *PermissionControllerStorageTransactorRaw) Tr return _PermissionControllerStorage.Contract.contract.Transact(opts, method, params...) } +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_PermissionControllerStorage *PermissionControllerStorageCaller) CanCall(opts *bind.CallOpts, account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + var out []interface{} + err := _PermissionControllerStorage.contract.Call(opts, &out, "canCall", account, caller, target, selector) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_PermissionControllerStorage *PermissionControllerStorageSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + return _PermissionControllerStorage.Contract.CanCall(&_PermissionControllerStorage.CallOpts, account, caller, target, selector) +} + +// CanCall is a free data retrieval call binding the contract method 0xdf595cb8. +// +// Solidity: function canCall(address account, address caller, address target, bytes4 selector) view returns(bool) +func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (bool, error) { + return _PermissionControllerStorage.Contract.CanCall(&_PermissionControllerStorage.CallOpts, account, caller, target, selector) +} + // GetAdmins is a free data retrieval call binding the contract method 0xad5f2210. // // Solidity: function getAdmins(address account) view returns(address[]) @@ -211,6 +242,69 @@ func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) Ge return _PermissionControllerStorage.Contract.GetAdmins(&_PermissionControllerStorage.CallOpts, account) } +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_PermissionControllerStorage *PermissionControllerStorageCaller) GetAppointeePermissions(opts *bind.CallOpts, account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + var out []interface{} + err := _PermissionControllerStorage.contract.Call(opts, &out, "getAppointeePermissions", account, appointee) + + if err != nil { + return *new([]common.Address), *new([][4]byte), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + out1 := *abi.ConvertType(out[1], new([][4]byte)).(*[][4]byte) + + return out0, out1, err + +} + +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_PermissionControllerStorage *PermissionControllerStorageSession) GetAppointeePermissions(account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + return _PermissionControllerStorage.Contract.GetAppointeePermissions(&_PermissionControllerStorage.CallOpts, account, appointee) +} + +// GetAppointeePermissions is a free data retrieval call binding the contract method 0x882a3b38. +// +// Solidity: function getAppointeePermissions(address account, address appointee) view returns(address[], bytes4[]) +func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) GetAppointeePermissions(account common.Address, appointee common.Address) ([]common.Address, [][4]byte, error) { + return _PermissionControllerStorage.Contract.GetAppointeePermissions(&_PermissionControllerStorage.CallOpts, account, appointee) +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_PermissionControllerStorage *PermissionControllerStorageCaller) GetAppointees(opts *bind.CallOpts, account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + var out []interface{} + err := _PermissionControllerStorage.contract.Call(opts, &out, "getAppointees", account, target, selector) + + if err != nil { + return *new([]common.Address), err + } + + out0 := *abi.ConvertType(out[0], new([]common.Address)).(*[]common.Address) + + return out0, err + +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_PermissionControllerStorage *PermissionControllerStorageSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + return _PermissionControllerStorage.Contract.GetAppointees(&_PermissionControllerStorage.CallOpts, account, target, selector) +} + +// GetAppointees is a free data retrieval call binding the contract method 0xfddbdefd. +// +// Solidity: function getAppointees(address account, address target, bytes4 selector) view returns(address[]) +func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) ([]common.Address, error) { + return _PermissionControllerStorage.Contract.GetAppointees(&_PermissionControllerStorage.CallOpts, account, target, selector) +} + // GetPendingAdmins is a free data retrieval call binding the contract method 0x6bddfa1f. // // Solidity: function getPendingAdmins(address account) view returns(address[]) @@ -304,37 +398,6 @@ func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) Is return _PermissionControllerStorage.Contract.IsPendingAdmin(&_PermissionControllerStorage.CallOpts, account, pendingAdmin) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionControllerStorage *PermissionControllerStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _PermissionControllerStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionControllerStorage *PermissionControllerStorageSession) Version() (string, error) { - return _PermissionControllerStorage.Contract.Version(&_PermissionControllerStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_PermissionControllerStorage *PermissionControllerStorageCallerSession) Version() (string, error) { - return _PermissionControllerStorage.Contract.Version(&_PermissionControllerStorage.CallOpts) -} - // AcceptAdmin is a paid mutator transaction binding the contract method 0x628806ef. // // Solidity: function acceptAdmin(address account) returns() @@ -377,69 +440,6 @@ func (_PermissionControllerStorage *PermissionControllerStorageTransactorSession return _PermissionControllerStorage.Contract.AddPendingAdmin(&_PermissionControllerStorage.TransactOpts, account, admin) } -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_PermissionControllerStorage *PermissionControllerStorageTransactor) CanCall(opts *bind.TransactOpts, account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.contract.Transact(opts, "canCall", account, caller, target, selector) -} - -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_PermissionControllerStorage *PermissionControllerStorageSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.CanCall(&_PermissionControllerStorage.TransactOpts, account, caller, target, selector) -} - -// CanCall is a paid mutator transaction binding the contract method 0xdf595cb8. -// -// Solidity: function canCall(address account, address caller, address target, bytes4 selector) returns(bool) -func (_PermissionControllerStorage *PermissionControllerStorageTransactorSession) CanCall(account common.Address, caller common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.CanCall(&_PermissionControllerStorage.TransactOpts, account, caller, target, selector) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_PermissionControllerStorage *PermissionControllerStorageTransactor) GetAppointeePermissions(opts *bind.TransactOpts, account common.Address, appointee common.Address) (*types.Transaction, error) { - return _PermissionControllerStorage.contract.Transact(opts, "getAppointeePermissions", account, appointee) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_PermissionControllerStorage *PermissionControllerStorageSession) GetAppointeePermissions(account common.Address, appointee common.Address) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.GetAppointeePermissions(&_PermissionControllerStorage.TransactOpts, account, appointee) -} - -// GetAppointeePermissions is a paid mutator transaction binding the contract method 0x882a3b38. -// -// Solidity: function getAppointeePermissions(address account, address appointee) returns(address[], bytes4[]) -func (_PermissionControllerStorage *PermissionControllerStorageTransactorSession) GetAppointeePermissions(account common.Address, appointee common.Address) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.GetAppointeePermissions(&_PermissionControllerStorage.TransactOpts, account, appointee) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_PermissionControllerStorage *PermissionControllerStorageTransactor) GetAppointees(opts *bind.TransactOpts, account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.contract.Transact(opts, "getAppointees", account, target, selector) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_PermissionControllerStorage *PermissionControllerStorageSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.GetAppointees(&_PermissionControllerStorage.TransactOpts, account, target, selector) -} - -// GetAppointees is a paid mutator transaction binding the contract method 0xfddbdefd. -// -// Solidity: function getAppointees(address account, address target, bytes4 selector) returns(address[]) -func (_PermissionControllerStorage *PermissionControllerStorageTransactorSession) GetAppointees(account common.Address, target common.Address, selector [4]byte) (*types.Transaction, error) { - return _PermissionControllerStorage.Contract.GetAppointees(&_PermissionControllerStorage.TransactOpts, account, target, selector) -} - // RemoveAdmin is a paid mutator transaction binding the contract method 0x268959e5. // // Solidity: function removeAdmin(address account, address admin) returns() diff --git a/pkg/bindings/ProtocolRegistry/binding.go b/pkg/bindings/ProtocolRegistry/binding.go new file mode 100644 index 0000000000..ce5d70cfb2 --- /dev/null +++ b/pkg/bindings/ProtocolRegistry/binding.go @@ -0,0 +1,1837 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ProtocolRegistry + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IProtocolRegistryTypesDeploymentConfig is an auto generated low-level Go binding around an user-defined struct. +type IProtocolRegistryTypesDeploymentConfig struct { + Pausable bool + Deprecated bool +} + +// ProtocolRegistryMetaData contains all meta data concerning the ProtocolRegistry contract. +var ProtocolRegistryMetaData = &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\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configure\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAddress\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"names\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeployment\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"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\":\"grantRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"initialize\",\"inputs\":[{\"name\":\"initialAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pauserMultisig\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"majorVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceRole\",\"inputs\":[{\"name\":\"role\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"account\",\"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\":\"ship\",\"inputs\":[{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"names\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"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\":\"totalDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DeploymentConfigured\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DeploymentShipped\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"SemanticVersionUpdated\",\"inputs\":[{\"name\":\"previousSemanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", + Bin: "0x6080604052348015600e575f5ffd5b5060156019565b60d3565b5f54610100900460ff161560835760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff9081161460d1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611955806100e05f395ff3fe608060405234801561000f575f5ffd5b5060043610610127575f3560e01c8063a217fddf116100a9578063d34663891161006e578063d346638914610286578063d547741f14610299578063e63ab1e9146102ac578063fb35b4e4146102b7578063fc434a8a146102bf575f5ffd5b8063a217fddf14610230578063a8091d9714610237578063af05a5c514610258578063bf40fac114610260578063ca15c87314610273575f5ffd5b806354fd4d50116100ef57806354fd4d50146101be578063595c6a67146101d35780638eec00b8146101db5780639010d07c146101f257806391d148541461021d575f5ffd5b806301ffc9a71461012b578063248a9ca3146101535780632f2ff15d1461018357806336568abe14610198578063485cc955146101ab575b5f5ffd5b61013e610139366004611288565b6102d2565b60405190151581526020015b60405180910390f35b6101756101613660046112af565b5f9081526065602052604090206001015490565b60405190815260200161014a565b6101966101913660046112e1565b6102fc565b005b6101966101a63660046112e1565b610325565b6101966101b936600461130b565b6103a8565b6101c66104c5565b60405161014a9190611361565b6101966104d7565b6101e36105b7565b60405161014a939291906113c6565b610205610200366004611483565b61078a565b6040516001600160a01b03909116815260200161014a565b61013e61022b3660046112e1565b6107a8565b6101755f81565b61024a6102453660046114e0565b6107d2565b60405161014a92919061151e565b6101c661087e565b61020561026e3660046114e0565b6108d5565b6101756102813660046112af565b61091a565b610196610294366004611549565b610930565b6101966102a73660046112e1565b6109a6565b610175600160f81b81565b6101756109ca565b6101966102cd3660046115c5565b6109d5565b5f6001600160e01b03198216635a05180f60e01b14806102f657506102f682610a72565b92915050565b5f8281526065602052604090206001015461031681610aa6565b6103208383610ab3565b505050565b6001600160a01b038116331461039a5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b6103a48282610ad4565b5050565b5f54610100900460ff16158080156103c657505f54600160ff909116105b806103df5750303b1580156103df57505f5460ff166001145b6104425760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610391565b5f805460ff191660011790558015610463575f805461ff0019166101001790555b61046d5f84610ab3565b61047b600160f81b83610ab3565b8015610320575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a1505050565b60606104d260c954610af5565b905090565b600160f81b6104e581610aa6565b5f6104ee6109ca565b90505f5b81811015610320575f61050660ca83610b32565b6001600160a01b0381165f90815260cd602090815260409182902082518084019093525460ff80821615801580865261010090930490911615159284019290925292945090925061055957508060200151155b156105ad57816001600160a01b031663595c6a676040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610596575f5ffd5b505af11580156105a8573d5f5f3e3d5ffd5b505050505b50506001016104f2565b60608060605f6105c56109ca565b9050806001600160401b038111156105df576105df6116c0565b60405190808252806020026020018201604052801561061257816020015b60608152602001906001900390816105fd5790505b509350806001600160401b0381111561062d5761062d6116c0565b604051908082528060200260200182016040528015610656578160200160208202803683370190505b509250806001600160401b03811115610671576106716116c0565b6040519080825280602002602001820160405280156106b557816020015b604080518082019091525f808252602082015281526020019060019003908161068f5790505b5091505f5b81811015610783575f806106cf60ca84610b32565b90925090506106dd82610af5565b8784815181106106ef576106ef6116d4565b60200260200101819052508086848151811061070d5761070d6116d4565b6001600160a01b039283166020918202929092018101919091529082165f90815260cd825260409081902081518083019092525460ff8082161515835261010090910416151591810191909152855186908590811061076e5761076e6116d4565b602090810291909101015250506001016106ba565b5050909192565b5f8281526097602052604081206107a19083610b4d565b9392505050565b5f9182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b604080518082019091525f808252602082018190529061083761082f61082c86868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b5892505050565b90565b60ca90610b95565b6001600160a01b0381165f90815260cd602090815260409182902082518084019093525460ff808216151584526101009091041615159082015290925090505b9250929050565b60605f61088c60c954610af5565b9050805f815181106108a0576108a06116d4565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b5f6107a161082f61082c85858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b5892505050565b5f8181526097602052604081206102f690610ba0565b5f61093a81610aa6565b6001600160a01b0383165f90815260cd60205260409020829061095d82826116f5565b905050826001600160a01b03167f6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d83604051610999919061173b565b60405180910390a2505050565b5f828152606560205260409020600101546109c081610aa6565b6103208383610ad4565b5f6104d260ca610ba9565b5f6109df81610aa6565b6109e98383610bb3565b5f5b88811015610a6657610a5e8a8a83818110610a0857610a086116d4565b9050602002016020810190610a1d919061176b565b898984818110610a2f57610a2f6116d4565b905060400201888885818110610a4757610a476116d4565b9050602002810190610a599190611784565b610c36565b6001016109eb565b50505050505050505050565b5f6001600160e01b03198216637965db0b60e01b14806102f657506301ffc9a760e01b6001600160e01b03198316146102f6565b610ab08133610cf1565b50565b610abd8282610d4a565b5f8281526097602052604090206103209082610dcf565b610ade8282610de3565b5f8281526097602052604090206103209082610e49565b60605f610b0183610e5d565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f808080610b408686610e84565b9097909650945050505050565b5f6107a18383610ead565b5f5f829050601f81511115610b82578260405163305a27a960e01b81526004016103919190611361565b8051610b8d826117c6565b179392505050565b5f6107a18383610ed3565b5f6102f6825490565b5f6102f682610f42565b5f610bbf60c954610af5565b9050610bff83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b5892505050565b60c9556040517f769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2906104b8908390869086906117ec565b610c83610c7a61082c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610b5892505050565b60ca9086610f4c565b506001600160a01b0384165f90815260cd602052604090208390610ca782826116f5565b905050836001600160a01b03167f4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c84604051610ce3919061173b565b60405180910390a250505050565b610cfb82826107a8565b6103a457610d0881610f69565b610d13836020610f7b565b604051602001610d24929190611847565b60408051601f198184030181529082905262461bcd60e51b825261039191600401611361565b610d5482826107a8565b6103a4575f8281526065602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610d8b3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b5f6107a1836001600160a01b038416611110565b610ded82826107a8565b156103a4575f8281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b5f6107a1836001600160a01b03841661115c565b5f60ff8216601f8111156102f657604051632cd44ac360e21b815260040160405180910390fd5b5f8080610e918585610b4d565b5f81815260029690960160205260409095205494959350505050565b5f825f018281548110610ec257610ec26116d4565b905f5260205f200154905092915050565b5f81815260028301602052604081205480151580610ef65750610ef6848461123f565b6107a15760405162461bcd60e51b815260206004820152601e60248201527f456e756d657261626c654d61703a206e6f6e6578697374656e74206b657900006044820152606401610391565b5f6102f682610ba0565b5f610f6184846001600160a01b03851661124a565b949350505050565b60606102f66001600160a01b03831660145b60605f610f898360026118b9565b610f949060026118d0565b6001600160401b03811115610fab57610fab6116c0565b6040519080825280601f01601f191660200182016040528015610fd5576020820181803683370190505b509050600360fc1b815f81518110610fef57610fef6116d4565b60200101906001600160f81b03191690815f1a905350600f60fb1b8160018151811061101d5761101d6116d4565b60200101906001600160f81b03191690815f1a9053505f61103f8460026118b9565b61104a9060016118d0565b90505b60018111156110c1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061107e5761107e6116d4565b1a60f81b828281518110611094576110946116d4565b60200101906001600160f81b03191690815f1a90535060049490941c936110ba816118e3565b905061104d565b5083156107a15760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610391565b5f81815260018301602052604081205461115557508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556102f6565b505f6102f6565b5f8181526001830160205260408120548015611236575f61117e6001836118f8565b85549091505f90611191906001906118f8565b90508181146111f0575f865f0182815481106111af576111af6116d4565b905f5260205f200154905080875f0184815481106111cf576111cf6116d4565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806112015761120161190b565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506102f6565b5f9150506102f6565b5f6107a18383611266565b5f8281526002840160205260408120829055610f61848461127d565b5f81815260018301602052604081205415156107a1565b5f6107a18383611110565b5f60208284031215611298575f5ffd5b81356001600160e01b0319811681146107a1575f5ffd5b5f602082840312156112bf575f5ffd5b5035919050565b80356001600160a01b03811681146112dc575f5ffd5b919050565b5f5f604083850312156112f2575f5ffd5b82359150611302602084016112c6565b90509250929050565b5f5f6040838503121561131c575f5ffd5b611325836112c6565b9150611302602084016112c6565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6107a16020830184611333565b5f8151808452602084019350602083015f5b828110156113bc576113a68683518051151582526020908101511515910152565b6040959095019460209190910190600101611385565b5093949350505050565b5f606082016060835280865180835260808501915060808160051b8601019250602088015f5b8281101561141d57607f19878603018452611408858351611333565b945060209384019391909101906001016113ec565b5050505082810360208401528085518083526020830191506020870192505f5b818110156114645783516001600160a01b031683526020938401939092019160010161143d565b505083810360408501526114788186611373565b979650505050505050565b5f5f60408385031215611494575f5ffd5b50508035926020909101359150565b5f5f83601f8401126114b3575f5ffd5b5081356001600160401b038111156114c9575f5ffd5b602083019150836020828501011115610877575f5ffd5b5f5f602083850312156114f1575f5ffd5b82356001600160401b03811115611506575f5ffd5b611512858286016114a3565b90969095509350505050565b6001600160a01b0383168152606081016107a160208301848051151582526020908101511515910152565b5f5f828403606081121561155b575f5ffd5b611564846112c6565b92506040601f1982011215611577575f5ffd5b506020830190509250929050565b5f5f83601f840112611595575f5ffd5b5081356001600160401b038111156115ab575f5ffd5b6020830191508360208260051b8501011115610877575f5ffd5b5f5f5f5f5f5f5f5f6080898b0312156115dc575f5ffd5b88356001600160401b038111156115f1575f5ffd5b6115fd8b828c01611585565b90995097505060208901356001600160401b0381111561161b575f5ffd5b8901601f81018b1361162b575f5ffd5b80356001600160401b03811115611640575f5ffd5b8b60208260061b8401011115611654575f5ffd5b6020919091019650945060408901356001600160401b03811115611676575f5ffd5b6116828b828c01611585565b90955093505060608901356001600160401b038111156116a0575f5ffd5b6116ac8b828c016114a3565b999c989b5096995094979396929594505050565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b8015158114610ab0575f5ffd5b8135611700816116e8565b815460ff19811691151560ff1691821783556020840135611720816116e8565b61ffff199190911690911790151560081b61ff001617905550565b60408101823561174a816116e8565b15158252602083013561175c816116e8565b80151560208401525092915050565b5f6020828403121561177b575f5ffd5b6107a1826112c6565b5f5f8335601e19843603018112611799575f5ffd5b8301803591506001600160401b038211156117b2575f5ffd5b602001915036819003821315610877575f5ffd5b805160208083015191908110156117e6575f198160200360031b1b821691505b50919050565b604081525f6117fe6040830186611333565b8281036020840152838152838560208301375f602085830101526020601f19601f860116820101915050949350505050565b5f81518060208401855e5f93019283525090919050565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f6118786017830185611830565b7001034b99036b4b9b9b4b733903937b6329607d1b815261189c6011820185611830565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176102f6576102f66118a5565b808201808211156102f6576102f66118a5565b5f816118f1576118f16118a5565b505f190190565b818103818111156102f6576102f66118a5565b634e487b7160e01b5f52603160045260245ffdfea2646970667358221220a47383a6fc434b202a40d8ea6bc81334170b0fcf44b93b2046959eeb229e602a64736f6c634300081e0033", +} + +// ProtocolRegistryABI is the input ABI used to generate the binding from. +// Deprecated: Use ProtocolRegistryMetaData.ABI instead. +var ProtocolRegistryABI = ProtocolRegistryMetaData.ABI + +// ProtocolRegistryBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use ProtocolRegistryMetaData.Bin instead. +var ProtocolRegistryBin = ProtocolRegistryMetaData.Bin + +// DeployProtocolRegistry deploys a new Ethereum contract, binding an instance of ProtocolRegistry to it. +func DeployProtocolRegistry(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *ProtocolRegistry, error) { + parsed, err := ProtocolRegistryMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ProtocolRegistryBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &ProtocolRegistry{ProtocolRegistryCaller: ProtocolRegistryCaller{contract: contract}, ProtocolRegistryTransactor: ProtocolRegistryTransactor{contract: contract}, ProtocolRegistryFilterer: ProtocolRegistryFilterer{contract: contract}}, nil +} + +// ProtocolRegistry is an auto generated Go binding around an Ethereum contract. +type ProtocolRegistry struct { + ProtocolRegistryCaller // Read-only binding to the contract + ProtocolRegistryTransactor // Write-only binding to the contract + ProtocolRegistryFilterer // Log filterer for contract events +} + +// ProtocolRegistryCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProtocolRegistryCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistryTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProtocolRegistryTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistryFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProtocolRegistryFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistrySession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProtocolRegistrySession struct { + Contract *ProtocolRegistry // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolRegistryCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProtocolRegistryCallerSession struct { + Contract *ProtocolRegistryCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProtocolRegistryTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProtocolRegistryTransactorSession struct { + Contract *ProtocolRegistryTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolRegistryRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProtocolRegistryRaw struct { + Contract *ProtocolRegistry // Generic contract binding to access the raw methods on +} + +// ProtocolRegistryCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProtocolRegistryCallerRaw struct { + Contract *ProtocolRegistryCaller // Generic read-only contract binding to access the raw methods on +} + +// ProtocolRegistryTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProtocolRegistryTransactorRaw struct { + Contract *ProtocolRegistryTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProtocolRegistry creates a new instance of ProtocolRegistry, bound to a specific deployed contract. +func NewProtocolRegistry(address common.Address, backend bind.ContractBackend) (*ProtocolRegistry, error) { + contract, err := bindProtocolRegistry(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ProtocolRegistry{ProtocolRegistryCaller: ProtocolRegistryCaller{contract: contract}, ProtocolRegistryTransactor: ProtocolRegistryTransactor{contract: contract}, ProtocolRegistryFilterer: ProtocolRegistryFilterer{contract: contract}}, nil +} + +// NewProtocolRegistryCaller creates a new read-only instance of ProtocolRegistry, bound to a specific deployed contract. +func NewProtocolRegistryCaller(address common.Address, caller bind.ContractCaller) (*ProtocolRegistryCaller, error) { + contract, err := bindProtocolRegistry(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProtocolRegistryCaller{contract: contract}, nil +} + +// NewProtocolRegistryTransactor creates a new write-only instance of ProtocolRegistry, bound to a specific deployed contract. +func NewProtocolRegistryTransactor(address common.Address, transactor bind.ContractTransactor) (*ProtocolRegistryTransactor, error) { + contract, err := bindProtocolRegistry(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProtocolRegistryTransactor{contract: contract}, nil +} + +// NewProtocolRegistryFilterer creates a new log filterer instance of ProtocolRegistry, bound to a specific deployed contract. +func NewProtocolRegistryFilterer(address common.Address, filterer bind.ContractFilterer) (*ProtocolRegistryFilterer, error) { + contract, err := bindProtocolRegistry(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProtocolRegistryFilterer{contract: contract}, nil +} + +// bindProtocolRegistry binds a generic wrapper to an already deployed contract. +func bindProtocolRegistry(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProtocolRegistryMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolRegistry *ProtocolRegistryRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolRegistry.Contract.ProtocolRegistryCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolRegistry *ProtocolRegistryRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.ProtocolRegistryTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolRegistry *ProtocolRegistryRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.ProtocolRegistryTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolRegistry *ProtocolRegistryCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolRegistry.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolRegistry *ProtocolRegistryTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolRegistry *ProtocolRegistryTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.contract.Transact(opts, method, params...) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE") + + 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 (_ProtocolRegistry *ProtocolRegistrySession) DEFAULTADMINROLE() ([32]byte, error) { + return _ProtocolRegistry.Contract.DEFAULTADMINROLE(&_ProtocolRegistry.CallOpts) +} + +// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf. +// +// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) DEFAULTADMINROLE() ([32]byte, error) { + return _ProtocolRegistry.Contract.DEFAULTADMINROLE(&_ProtocolRegistry.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistrySession) PAUSERROLE() ([32]byte, error) { + return _ProtocolRegistry.Contract.PAUSERROLE(&_ProtocolRegistry.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) PAUSERROLE() ([32]byte, error) { + return _ProtocolRegistry.Contract.PAUSERROLE(&_ProtocolRegistry.CallOpts) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistry *ProtocolRegistryCaller) GetAddress(opts *bind.CallOpts, name string) (common.Address, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "getAddress", name) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistry *ProtocolRegistrySession) GetAddress(name string) (common.Address, error) { + return _ProtocolRegistry.Contract.GetAddress(&_ProtocolRegistry.CallOpts, name) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) GetAddress(name string) (common.Address, error) { + return _ProtocolRegistry.Contract.GetAddress(&_ProtocolRegistry.CallOpts, name) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistry *ProtocolRegistryCaller) GetAllDeployments(opts *bind.CallOpts) (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "getAllDeployments") + + outstruct := new(struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Names = *abi.ConvertType(out[0], new([]string)).(*[]string) + outstruct.Addresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) + outstruct.Configs = *abi.ConvertType(out[2], new([]IProtocolRegistryTypesDeploymentConfig)).(*[]IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistry *ProtocolRegistrySession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistry.Contract.GetAllDeployments(&_ProtocolRegistry.CallOpts) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistry.Contract.GetAllDeployments(&_ProtocolRegistry.CallOpts) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryCaller) GetDeployment(opts *bind.CallOpts, name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "getDeployment", name) + + outstruct := new(struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Config = *abi.ConvertType(out[1], new(IProtocolRegistryTypesDeploymentConfig)).(*IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistrySession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistry.Contract.GetDeployment(&_ProtocolRegistry.CallOpts, name) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistry.Contract.GetDeployment(&_ProtocolRegistry.CallOpts, name) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) { + var out []interface{} + err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ProtocolRegistry.Contract.GetRoleAdmin(&_ProtocolRegistry.CallOpts, role) +} + +// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3. +// +// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) { + return _ProtocolRegistry.Contract.GetRoleAdmin(&_ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryCaller) GetRoleMember(opts *bind.CallOpts, role [32]byte, index *big.Int) (common.Address, error) { + var out []interface{} + err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _ProtocolRegistry.Contract.GetRoleMember(&_ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryCallerSession) GetRoleMember(role [32]byte, index *big.Int) (common.Address, error) { + return _ProtocolRegistry.Contract.GetRoleMember(&_ProtocolRegistry.CallOpts, role, index) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_ProtocolRegistry *ProtocolRegistryCaller) GetRoleMemberCount(opts *bind.CallOpts, role [32]byte) (*big.Int, error) { + var out []interface{} + err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _ProtocolRegistry.Contract.GetRoleMemberCount(&_ProtocolRegistry.CallOpts, role) +} + +// GetRoleMemberCount is a free data retrieval call binding the contract method 0xca15c873. +// +// Solidity: function getRoleMemberCount(bytes32 role) view returns(uint256) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) GetRoleMemberCount(role [32]byte) (*big.Int, error) { + return _ProtocolRegistry.Contract.GetRoleMemberCount(&_ProtocolRegistry.CallOpts, role) +} + +// HasRole is a free data retrieval call binding the contract method 0x91d14854. +// +// Solidity: function hasRole(bytes32 role, address account) view returns(bool) +func (_ProtocolRegistry *ProtocolRegistryCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) { + var out []interface{} + err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ProtocolRegistry.Contract.HasRole(&_ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) { + return _ProtocolRegistry.Contract.HasRole(&_ProtocolRegistry.CallOpts, role, account) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistry *ProtocolRegistryCaller) MajorVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "majorVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistry *ProtocolRegistrySession) MajorVersion() (string, error) { + return _ProtocolRegistry.Contract.MajorVersion(&_ProtocolRegistry.CallOpts) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) MajorVersion() (string, error) { + return _ProtocolRegistry.Contract.MajorVersion(&_ProtocolRegistry.CallOpts) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ProtocolRegistry *ProtocolRegistryCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) { + var out []interface{} + err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ProtocolRegistry.Contract.SupportsInterface(&_ProtocolRegistry.CallOpts, interfaceId) +} + +// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7. +// +// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) { + return _ProtocolRegistry.Contract.SupportsInterface(&_ProtocolRegistry.CallOpts, interfaceId) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistry *ProtocolRegistryCaller) TotalDeployments(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "totalDeployments") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistry *ProtocolRegistrySession) TotalDeployments() (*big.Int, error) { + return _ProtocolRegistry.Contract.TotalDeployments(&_ProtocolRegistry.CallOpts) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) TotalDeployments() (*big.Int, error) { + return _ProtocolRegistry.Contract.TotalDeployments(&_ProtocolRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistry *ProtocolRegistryCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProtocolRegistry.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistry *ProtocolRegistrySession) Version() (string, error) { + return _ProtocolRegistry.Contract.Version(&_ProtocolRegistry.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistry *ProtocolRegistryCallerSession) Version() (string, error) { + return _ProtocolRegistry.Contract.Version(&_ProtocolRegistry.CallOpts) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) Configure(opts *bind.TransactOpts, addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistry.contract.Transact(opts, "configure", addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistry *ProtocolRegistrySession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Configure(&_ProtocolRegistry.TransactOpts, addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Configure(&_ProtocolRegistry.TransactOpts, addr, config) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.GrantRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d. +// +// Solidity: function grantRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.GrantRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) Initialize(opts *bind.TransactOpts, initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.contract.Transact(opts, "initialize", initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistry *ProtocolRegistrySession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Initialize(&_ProtocolRegistry.TransactOpts, initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Initialize(&_ProtocolRegistry.TransactOpts, initialAdmin, pauserMultisig) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistry.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistry *ProtocolRegistrySession) PauseAll() (*types.Transaction, error) { + return _ProtocolRegistry.Contract.PauseAll(&_ProtocolRegistry.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) PauseAll() (*types.Transaction, error) { + return _ProtocolRegistry.Contract.PauseAll(&_ProtocolRegistry.TransactOpts) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.contract.Transact(opts, "renounceRole", role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistrySession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.RenounceRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe. +// +// Solidity: function renounceRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) RenounceRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.RenounceRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistrySession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.RevokeRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f. +// +// Solidity: function revokeRole(bytes32 role, address account) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.RevokeRole(&_ProtocolRegistry.TransactOpts, role, account) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] names, string semanticVersion) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactor) Ship(opts *bind.TransactOpts, addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, names []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistry.contract.Transact(opts, "ship", addresses, configs, names, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] names, string semanticVersion) returns() +func (_ProtocolRegistry *ProtocolRegistrySession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, names []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Ship(&_ProtocolRegistry.TransactOpts, addresses, configs, names, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] names, string semanticVersion) returns() +func (_ProtocolRegistry *ProtocolRegistryTransactorSession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, names []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistry.Contract.Ship(&_ProtocolRegistry.TransactOpts, addresses, configs, names, semanticVersion) +} + +// ProtocolRegistryDeploymentConfiguredIterator is returned from FilterDeploymentConfigured and is used to iterate over the raw logs and unpacked data for DeploymentConfigured events raised by the ProtocolRegistry contract. +type ProtocolRegistryDeploymentConfiguredIterator struct { + Event *ProtocolRegistryDeploymentConfigured // 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 *ProtocolRegistryDeploymentConfiguredIterator) 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(ProtocolRegistryDeploymentConfigured) + 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(ProtocolRegistryDeploymentConfigured) + 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 *ProtocolRegistryDeploymentConfiguredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryDeploymentConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryDeploymentConfigured represents a DeploymentConfigured event raised by the ProtocolRegistry contract. +type ProtocolRegistryDeploymentConfigured struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentConfigured is a free log retrieval operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) FilterDeploymentConfigured(opts *bind.FilterOpts, addr []common.Address) (*ProtocolRegistryDeploymentConfiguredIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistry.contract.FilterLogs(opts, "DeploymentConfigured", addrRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryDeploymentConfiguredIterator{contract: _ProtocolRegistry.contract, event: "DeploymentConfigured", logs: logs, sub: sub}, nil +} + +// WatchDeploymentConfigured is a free log subscription operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) WatchDeploymentConfigured(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryDeploymentConfigured, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistry.contract.WatchLogs(opts, "DeploymentConfigured", addrRule) + 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(ProtocolRegistryDeploymentConfigured) + if err := _ProtocolRegistry.contract.UnpackLog(event, "DeploymentConfigured", 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 +} + +// ParseDeploymentConfigured is a log parse operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) ParseDeploymentConfigured(log types.Log) (*ProtocolRegistryDeploymentConfigured, error) { + event := new(ProtocolRegistryDeploymentConfigured) + if err := _ProtocolRegistry.contract.UnpackLog(event, "DeploymentConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryDeploymentShippedIterator is returned from FilterDeploymentShipped and is used to iterate over the raw logs and unpacked data for DeploymentShipped events raised by the ProtocolRegistry contract. +type ProtocolRegistryDeploymentShippedIterator struct { + Event *ProtocolRegistryDeploymentShipped // 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 *ProtocolRegistryDeploymentShippedIterator) 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(ProtocolRegistryDeploymentShipped) + 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(ProtocolRegistryDeploymentShipped) + 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 *ProtocolRegistryDeploymentShippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryDeploymentShippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryDeploymentShipped represents a DeploymentShipped event raised by the ProtocolRegistry contract. +type ProtocolRegistryDeploymentShipped struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentShipped is a free log retrieval operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) FilterDeploymentShipped(opts *bind.FilterOpts, addr []common.Address) (*ProtocolRegistryDeploymentShippedIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistry.contract.FilterLogs(opts, "DeploymentShipped", addrRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryDeploymentShippedIterator{contract: _ProtocolRegistry.contract, event: "DeploymentShipped", logs: logs, sub: sub}, nil +} + +// WatchDeploymentShipped is a free log subscription operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) WatchDeploymentShipped(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryDeploymentShipped, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistry.contract.WatchLogs(opts, "DeploymentShipped", addrRule) + 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(ProtocolRegistryDeploymentShipped) + if err := _ProtocolRegistry.contract.UnpackLog(event, "DeploymentShipped", 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 +} + +// ParseDeploymentShipped is a log parse operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistry *ProtocolRegistryFilterer) ParseDeploymentShipped(log types.Log) (*ProtocolRegistryDeploymentShipped, error) { + event := new(ProtocolRegistryDeploymentShipped) + if err := _ProtocolRegistry.contract.UnpackLog(event, "DeploymentShipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the ProtocolRegistry contract. +type ProtocolRegistryInitializedIterator struct { + Event *ProtocolRegistryInitialized // 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 *ProtocolRegistryInitializedIterator) 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(ProtocolRegistryInitialized) + 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(ProtocolRegistryInitialized) + 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 *ProtocolRegistryInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryInitialized represents a Initialized event raised by the ProtocolRegistry contract. +type ProtocolRegistryInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolRegistry *ProtocolRegistryFilterer) FilterInitialized(opts *bind.FilterOpts) (*ProtocolRegistryInitializedIterator, error) { + + logs, sub, err := _ProtocolRegistry.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &ProtocolRegistryInitializedIterator{contract: _ProtocolRegistry.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolRegistry *ProtocolRegistryFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryInitialized) (event.Subscription, error) { + + logs, sub, err := _ProtocolRegistry.contract.WatchLogs(opts, "Initialized") + 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(ProtocolRegistryInitialized) + if err := _ProtocolRegistry.contract.UnpackLog(event, "Initialized", 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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_ProtocolRegistry *ProtocolRegistryFilterer) ParseInitialized(log types.Log) (*ProtocolRegistryInitialized, error) { + event := new(ProtocolRegistryInitialized) + if err := _ProtocolRegistry.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleAdminChangedIterator struct { + Event *ProtocolRegistryRoleAdminChanged // 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 *ProtocolRegistryRoleAdminChangedIterator) 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(ProtocolRegistryRoleAdminChanged) + 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(ProtocolRegistryRoleAdminChanged) + 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 *ProtocolRegistryRoleAdminChangedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryRoleAdminChangedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryRoleAdminChanged represents a RoleAdminChanged event raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleAdminChanged struct { + Role [32]byte + PreviousAdminRole [32]byte + NewAdminRole [32]byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ProtocolRegistry *ProtocolRegistryFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*ProtocolRegistryRoleAdminChangedIterator, 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) + } + + logs, sub, err := _ProtocolRegistry.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryRoleAdminChangedIterator{contract: _ProtocolRegistry.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil +} + +// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ProtocolRegistry *ProtocolRegistryFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (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) + } + + logs, sub, err := _ProtocolRegistry.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule) + 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(ProtocolRegistryRoleAdminChanged) + if err := _ProtocolRegistry.contract.UnpackLog(event, "RoleAdminChanged", 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 +} + +// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff. +// +// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole) +func (_ProtocolRegistry *ProtocolRegistryFilterer) ParseRoleAdminChanged(log types.Log) (*ProtocolRegistryRoleAdminChanged, error) { + event := new(ProtocolRegistryRoleAdminChanged) + if err := _ProtocolRegistry.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleGrantedIterator struct { + Event *ProtocolRegistryRoleGranted // 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 *ProtocolRegistryRoleGrantedIterator) 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(ProtocolRegistryRoleGranted) + 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(ProtocolRegistryRoleGranted) + 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 *ProtocolRegistryRoleGrantedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryRoleGrantedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryRoleGranted represents a RoleGranted event raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleGranted 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 (_ProtocolRegistry *ProtocolRegistryFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ProtocolRegistryRoleGrantedIterator, 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 := _ProtocolRegistry.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryRoleGrantedIterator{contract: _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryRoleGranted, 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 := _ProtocolRegistry.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(ProtocolRegistryRoleGranted) + if err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryFilterer) ParseRoleGranted(log types.Log) (*ProtocolRegistryRoleGranted, error) { + event := new(ProtocolRegistryRoleGranted) + if err := _ProtocolRegistry.contract.UnpackLog(event, "RoleGranted", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleRevokedIterator struct { + Event *ProtocolRegistryRoleRevoked // 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 *ProtocolRegistryRoleRevokedIterator) 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(ProtocolRegistryRoleRevoked) + 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(ProtocolRegistryRoleRevoked) + 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 *ProtocolRegistryRoleRevokedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryRoleRevokedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryRoleRevoked represents a RoleRevoked event raised by the ProtocolRegistry contract. +type ProtocolRegistryRoleRevoked 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 (_ProtocolRegistry *ProtocolRegistryFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*ProtocolRegistryRoleRevokedIterator, 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 := _ProtocolRegistry.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryRoleRevokedIterator{contract: _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryRoleRevoked, 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 := _ProtocolRegistry.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(ProtocolRegistryRoleRevoked) + if err := _ProtocolRegistry.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 (_ProtocolRegistry *ProtocolRegistryFilterer) ParseRoleRevoked(log types.Log) (*ProtocolRegistryRoleRevoked, error) { + event := new(ProtocolRegistryRoleRevoked) + if err := _ProtocolRegistry.contract.UnpackLog(event, "RoleRevoked", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistrySemanticVersionUpdatedIterator is returned from FilterSemanticVersionUpdated and is used to iterate over the raw logs and unpacked data for SemanticVersionUpdated events raised by the ProtocolRegistry contract. +type ProtocolRegistrySemanticVersionUpdatedIterator struct { + Event *ProtocolRegistrySemanticVersionUpdated // 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 *ProtocolRegistrySemanticVersionUpdatedIterator) 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(ProtocolRegistrySemanticVersionUpdated) + 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(ProtocolRegistrySemanticVersionUpdated) + 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 *ProtocolRegistrySemanticVersionUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistrySemanticVersionUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistrySemanticVersionUpdated represents a SemanticVersionUpdated event raised by the ProtocolRegistry contract. +type ProtocolRegistrySemanticVersionUpdated struct { + PreviousSemanticVersion string + SemanticVersion string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSemanticVersionUpdated is a free log retrieval operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistry *ProtocolRegistryFilterer) FilterSemanticVersionUpdated(opts *bind.FilterOpts) (*ProtocolRegistrySemanticVersionUpdatedIterator, error) { + + logs, sub, err := _ProtocolRegistry.contract.FilterLogs(opts, "SemanticVersionUpdated") + if err != nil { + return nil, err + } + return &ProtocolRegistrySemanticVersionUpdatedIterator{contract: _ProtocolRegistry.contract, event: "SemanticVersionUpdated", logs: logs, sub: sub}, nil +} + +// WatchSemanticVersionUpdated is a free log subscription operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistry *ProtocolRegistryFilterer) WatchSemanticVersionUpdated(opts *bind.WatchOpts, sink chan<- *ProtocolRegistrySemanticVersionUpdated) (event.Subscription, error) { + + logs, sub, err := _ProtocolRegistry.contract.WatchLogs(opts, "SemanticVersionUpdated") + 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(ProtocolRegistrySemanticVersionUpdated) + if err := _ProtocolRegistry.contract.UnpackLog(event, "SemanticVersionUpdated", 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 +} + +// ParseSemanticVersionUpdated is a log parse operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistry *ProtocolRegistryFilterer) ParseSemanticVersionUpdated(log types.Log) (*ProtocolRegistrySemanticVersionUpdated, error) { + event := new(ProtocolRegistrySemanticVersionUpdated) + if err := _ProtocolRegistry.contract.UnpackLog(event, "SemanticVersionUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ProtocolRegistryStorage/binding.go b/pkg/bindings/ProtocolRegistryStorage/binding.go new file mode 100644 index 0000000000..480c922c7f --- /dev/null +++ b/pkg/bindings/ProtocolRegistryStorage/binding.go @@ -0,0 +1,946 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package ProtocolRegistryStorage + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IProtocolRegistryTypesDeploymentConfig is an auto generated low-level Go binding around an user-defined struct. +type IProtocolRegistryTypesDeploymentConfig struct { + Pausable bool + Deprecated bool +} + +// ProtocolRegistryStorageMetaData contains all meta data concerning the ProtocolRegistryStorage contract. +var ProtocolRegistryStorageMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"PAUSER_ROLE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"configure\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getAddress\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAllDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"names\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeployment\",\"inputs\":[{\"name\":\"name\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[{\"name\":\"addr\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialAdmin\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"pauserMultisig\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"majorVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ship\",\"inputs\":[{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"configs\",\"type\":\"tuple[]\",\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig[]\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"name\":\"contractNames\",\"type\":\"string[]\",\"internalType\":\"string[]\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"totalDeployments\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"DeploymentConfigured\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DeploymentShipped\",\"inputs\":[{\"name\":\"addr\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIProtocolRegistryTypes.DeploymentConfig\",\"components\":[{\"name\":\"pausable\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"deprecated\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"SemanticVersionUpdated\",\"inputs\":[{\"name\":\"previousSemanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"},{\"name\":\"semanticVersion\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false}]", +} + +// ProtocolRegistryStorageABI is the input ABI used to generate the binding from. +// Deprecated: Use ProtocolRegistryStorageMetaData.ABI instead. +var ProtocolRegistryStorageABI = ProtocolRegistryStorageMetaData.ABI + +// ProtocolRegistryStorage is an auto generated Go binding around an Ethereum contract. +type ProtocolRegistryStorage struct { + ProtocolRegistryStorageCaller // Read-only binding to the contract + ProtocolRegistryStorageTransactor // Write-only binding to the contract + ProtocolRegistryStorageFilterer // Log filterer for contract events +} + +// ProtocolRegistryStorageCaller is an auto generated read-only Go binding around an Ethereum contract. +type ProtocolRegistryStorageCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistryStorageTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ProtocolRegistryStorageTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistryStorageFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ProtocolRegistryStorageFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ProtocolRegistryStorageSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ProtocolRegistryStorageSession struct { + Contract *ProtocolRegistryStorage // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolRegistryStorageCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ProtocolRegistryStorageCallerSession struct { + Contract *ProtocolRegistryStorageCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ProtocolRegistryStorageTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ProtocolRegistryStorageTransactorSession struct { + Contract *ProtocolRegistryStorageTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ProtocolRegistryStorageRaw is an auto generated low-level Go binding around an Ethereum contract. +type ProtocolRegistryStorageRaw struct { + Contract *ProtocolRegistryStorage // Generic contract binding to access the raw methods on +} + +// ProtocolRegistryStorageCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ProtocolRegistryStorageCallerRaw struct { + Contract *ProtocolRegistryStorageCaller // Generic read-only contract binding to access the raw methods on +} + +// ProtocolRegistryStorageTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ProtocolRegistryStorageTransactorRaw struct { + Contract *ProtocolRegistryStorageTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewProtocolRegistryStorage creates a new instance of ProtocolRegistryStorage, bound to a specific deployed contract. +func NewProtocolRegistryStorage(address common.Address, backend bind.ContractBackend) (*ProtocolRegistryStorage, error) { + contract, err := bindProtocolRegistryStorage(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorage{ProtocolRegistryStorageCaller: ProtocolRegistryStorageCaller{contract: contract}, ProtocolRegistryStorageTransactor: ProtocolRegistryStorageTransactor{contract: contract}, ProtocolRegistryStorageFilterer: ProtocolRegistryStorageFilterer{contract: contract}}, nil +} + +// NewProtocolRegistryStorageCaller creates a new read-only instance of ProtocolRegistryStorage, bound to a specific deployed contract. +func NewProtocolRegistryStorageCaller(address common.Address, caller bind.ContractCaller) (*ProtocolRegistryStorageCaller, error) { + contract, err := bindProtocolRegistryStorage(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageCaller{contract: contract}, nil +} + +// NewProtocolRegistryStorageTransactor creates a new write-only instance of ProtocolRegistryStorage, bound to a specific deployed contract. +func NewProtocolRegistryStorageTransactor(address common.Address, transactor bind.ContractTransactor) (*ProtocolRegistryStorageTransactor, error) { + contract, err := bindProtocolRegistryStorage(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageTransactor{contract: contract}, nil +} + +// NewProtocolRegistryStorageFilterer creates a new log filterer instance of ProtocolRegistryStorage, bound to a specific deployed contract. +func NewProtocolRegistryStorageFilterer(address common.Address, filterer bind.ContractFilterer) (*ProtocolRegistryStorageFilterer, error) { + contract, err := bindProtocolRegistryStorage(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageFilterer{contract: contract}, nil +} + +// bindProtocolRegistryStorage binds a generic wrapper to an already deployed contract. +func bindProtocolRegistryStorage(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ProtocolRegistryStorageMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolRegistryStorage.Contract.ProtocolRegistryStorageCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.ProtocolRegistryStorageTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.ProtocolRegistryStorageTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ProtocolRegistryStorage.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.contract.Transact(opts, method, params...) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) PAUSERROLE(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "PAUSER_ROLE") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) PAUSERROLE() ([32]byte, error) { + return _ProtocolRegistryStorage.Contract.PAUSERROLE(&_ProtocolRegistryStorage.CallOpts) +} + +// PAUSERROLE is a free data retrieval call binding the contract method 0xe63ab1e9. +// +// Solidity: function PAUSER_ROLE() view returns(bytes32) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) PAUSERROLE() ([32]byte, error) { + return _ProtocolRegistryStorage.Contract.PAUSERROLE(&_ProtocolRegistryStorage.CallOpts) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) GetAddress(opts *bind.CallOpts, name string) (common.Address, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "getAddress", name) + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) GetAddress(name string) (common.Address, error) { + return _ProtocolRegistryStorage.Contract.GetAddress(&_ProtocolRegistryStorage.CallOpts, name) +} + +// GetAddress is a free data retrieval call binding the contract method 0xbf40fac1. +// +// Solidity: function getAddress(string name) view returns(address) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) GetAddress(name string) (common.Address, error) { + return _ProtocolRegistryStorage.Contract.GetAddress(&_ProtocolRegistryStorage.CallOpts, name) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) GetAllDeployments(opts *bind.CallOpts) (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "getAllDeployments") + + outstruct := new(struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Names = *abi.ConvertType(out[0], new([]string)).(*[]string) + outstruct.Addresses = *abi.ConvertType(out[1], new([]common.Address)).(*[]common.Address) + outstruct.Configs = *abi.ConvertType(out[2], new([]IProtocolRegistryTypesDeploymentConfig)).(*[]IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistryStorage.Contract.GetAllDeployments(&_ProtocolRegistryStorage.CallOpts) +} + +// GetAllDeployments is a free data retrieval call binding the contract method 0x8eec00b8. +// +// Solidity: function getAllDeployments() view returns(string[] names, address[] addresses, (bool,bool)[] configs) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) GetAllDeployments() (struct { + Names []string + Addresses []common.Address + Configs []IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistryStorage.Contract.GetAllDeployments(&_ProtocolRegistryStorage.CallOpts) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) GetDeployment(opts *bind.CallOpts, name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "getDeployment", name) + + outstruct := new(struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + }) + if err != nil { + return *outstruct, err + } + + outstruct.Addr = *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + outstruct.Config = *abi.ConvertType(out[1], new(IProtocolRegistryTypesDeploymentConfig)).(*IProtocolRegistryTypesDeploymentConfig) + + return *outstruct, err + +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistryStorage.Contract.GetDeployment(&_ProtocolRegistryStorage.CallOpts, name) +} + +// GetDeployment is a free data retrieval call binding the contract method 0xa8091d97. +// +// Solidity: function getDeployment(string name) view returns(address addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) GetDeployment(name string) (struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig +}, error) { + return _ProtocolRegistryStorage.Contract.GetDeployment(&_ProtocolRegistryStorage.CallOpts, name) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) MajorVersion(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "majorVersion") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) MajorVersion() (string, error) { + return _ProtocolRegistryStorage.Contract.MajorVersion(&_ProtocolRegistryStorage.CallOpts) +} + +// MajorVersion is a free data retrieval call binding the contract method 0xaf05a5c5. +// +// Solidity: function majorVersion() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) MajorVersion() (string, error) { + return _ProtocolRegistryStorage.Contract.MajorVersion(&_ProtocolRegistryStorage.CallOpts) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) TotalDeployments(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "totalDeployments") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) TotalDeployments() (*big.Int, error) { + return _ProtocolRegistryStorage.Contract.TotalDeployments(&_ProtocolRegistryStorage.CallOpts) +} + +// TotalDeployments is a free data retrieval call binding the contract method 0xfb35b4e4. +// +// Solidity: function totalDeployments() view returns(uint256) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) TotalDeployments() (*big.Int, error) { + return _ProtocolRegistryStorage.Contract.TotalDeployments(&_ProtocolRegistryStorage.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _ProtocolRegistryStorage.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) Version() (string, error) { + return _ProtocolRegistryStorage.Contract.Version(&_ProtocolRegistryStorage.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() view returns(string) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageCallerSession) Version() (string, error) { + return _ProtocolRegistryStorage.Contract.Version(&_ProtocolRegistryStorage.CallOpts) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactor) Configure(opts *bind.TransactOpts, addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistryStorage.contract.Transact(opts, "configure", addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Configure(&_ProtocolRegistryStorage.TransactOpts, addr, config) +} + +// Configure is a paid mutator transaction binding the contract method 0xd3466389. +// +// Solidity: function configure(address addr, (bool,bool) config) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorSession) Configure(addr common.Address, config IProtocolRegistryTypesDeploymentConfig) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Configure(&_ProtocolRegistryStorage.TransactOpts, addr, config) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactor) Initialize(opts *bind.TransactOpts, initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistryStorage.contract.Transact(opts, "initialize", initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Initialize(&_ProtocolRegistryStorage.TransactOpts, initialAdmin, pauserMultisig) +} + +// Initialize is a paid mutator transaction binding the contract method 0x485cc955. +// +// Solidity: function initialize(address initialAdmin, address pauserMultisig) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorSession) Initialize(initialAdmin common.Address, pauserMultisig common.Address) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Initialize(&_ProtocolRegistryStorage.TransactOpts, initialAdmin, pauserMultisig) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactor) PauseAll(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ProtocolRegistryStorage.contract.Transact(opts, "pauseAll") +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) PauseAll() (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.PauseAll(&_ProtocolRegistryStorage.TransactOpts) +} + +// PauseAll is a paid mutator transaction binding the contract method 0x595c6a67. +// +// Solidity: function pauseAll() returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorSession) PauseAll() (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.PauseAll(&_ProtocolRegistryStorage.TransactOpts) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactor) Ship(opts *bind.TransactOpts, addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistryStorage.contract.Transact(opts, "ship", addresses, configs, contractNames, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageSession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Ship(&_ProtocolRegistryStorage.TransactOpts, addresses, configs, contractNames, semanticVersion) +} + +// Ship is a paid mutator transaction binding the contract method 0xfc434a8a. +// +// Solidity: function ship(address[] addresses, (bool,bool)[] configs, string[] contractNames, string semanticVersion) returns() +func (_ProtocolRegistryStorage *ProtocolRegistryStorageTransactorSession) Ship(addresses []common.Address, configs []IProtocolRegistryTypesDeploymentConfig, contractNames []string, semanticVersion string) (*types.Transaction, error) { + return _ProtocolRegistryStorage.Contract.Ship(&_ProtocolRegistryStorage.TransactOpts, addresses, configs, contractNames, semanticVersion) +} + +// ProtocolRegistryStorageDeploymentConfiguredIterator is returned from FilterDeploymentConfigured and is used to iterate over the raw logs and unpacked data for DeploymentConfigured events raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageDeploymentConfiguredIterator struct { + Event *ProtocolRegistryStorageDeploymentConfigured // 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 *ProtocolRegistryStorageDeploymentConfiguredIterator) 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(ProtocolRegistryStorageDeploymentConfigured) + 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(ProtocolRegistryStorageDeploymentConfigured) + 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 *ProtocolRegistryStorageDeploymentConfiguredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryStorageDeploymentConfiguredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryStorageDeploymentConfigured represents a DeploymentConfigured event raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageDeploymentConfigured struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentConfigured is a free log retrieval operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) FilterDeploymentConfigured(opts *bind.FilterOpts, addr []common.Address) (*ProtocolRegistryStorageDeploymentConfiguredIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistryStorage.contract.FilterLogs(opts, "DeploymentConfigured", addrRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageDeploymentConfiguredIterator{contract: _ProtocolRegistryStorage.contract, event: "DeploymentConfigured", logs: logs, sub: sub}, nil +} + +// WatchDeploymentConfigured is a free log subscription operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) WatchDeploymentConfigured(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryStorageDeploymentConfigured, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistryStorage.contract.WatchLogs(opts, "DeploymentConfigured", addrRule) + 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(ProtocolRegistryStorageDeploymentConfigured) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "DeploymentConfigured", 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 +} + +// ParseDeploymentConfigured is a log parse operation binding the contract event 0x6c5879ec82f910f6d12844857cfb8eb474dcecc9aa5b8257c7a77dcb42990e9d. +// +// Solidity: event DeploymentConfigured(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) ParseDeploymentConfigured(log types.Log) (*ProtocolRegistryStorageDeploymentConfigured, error) { + event := new(ProtocolRegistryStorageDeploymentConfigured) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "DeploymentConfigured", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryStorageDeploymentShippedIterator is returned from FilterDeploymentShipped and is used to iterate over the raw logs and unpacked data for DeploymentShipped events raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageDeploymentShippedIterator struct { + Event *ProtocolRegistryStorageDeploymentShipped // 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 *ProtocolRegistryStorageDeploymentShippedIterator) 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(ProtocolRegistryStorageDeploymentShipped) + 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(ProtocolRegistryStorageDeploymentShipped) + 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 *ProtocolRegistryStorageDeploymentShippedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryStorageDeploymentShippedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryStorageDeploymentShipped represents a DeploymentShipped event raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageDeploymentShipped struct { + Addr common.Address + Config IProtocolRegistryTypesDeploymentConfig + Raw types.Log // Blockchain specific contextual infos +} + +// FilterDeploymentShipped is a free log retrieval operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) FilterDeploymentShipped(opts *bind.FilterOpts, addr []common.Address) (*ProtocolRegistryStorageDeploymentShippedIterator, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistryStorage.contract.FilterLogs(opts, "DeploymentShipped", addrRule) + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageDeploymentShippedIterator{contract: _ProtocolRegistryStorage.contract, event: "DeploymentShipped", logs: logs, sub: sub}, nil +} + +// WatchDeploymentShipped is a free log subscription operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) WatchDeploymentShipped(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryStorageDeploymentShipped, addr []common.Address) (event.Subscription, error) { + + var addrRule []interface{} + for _, addrItem := range addr { + addrRule = append(addrRule, addrItem) + } + + logs, sub, err := _ProtocolRegistryStorage.contract.WatchLogs(opts, "DeploymentShipped", addrRule) + 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(ProtocolRegistryStorageDeploymentShipped) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "DeploymentShipped", 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 +} + +// ParseDeploymentShipped is a log parse operation binding the contract event 0x4e81e5495dbc85919bf1b9c12a9a4bb6d546f75d3f92fa0a36867fc29a51467c. +// +// Solidity: event DeploymentShipped(address indexed addr, (bool,bool) config) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) ParseDeploymentShipped(log types.Log) (*ProtocolRegistryStorageDeploymentShipped, error) { + event := new(ProtocolRegistryStorageDeploymentShipped) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "DeploymentShipped", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// ProtocolRegistryStorageSemanticVersionUpdatedIterator is returned from FilterSemanticVersionUpdated and is used to iterate over the raw logs and unpacked data for SemanticVersionUpdated events raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageSemanticVersionUpdatedIterator struct { + Event *ProtocolRegistryStorageSemanticVersionUpdated // 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 *ProtocolRegistryStorageSemanticVersionUpdatedIterator) 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(ProtocolRegistryStorageSemanticVersionUpdated) + 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(ProtocolRegistryStorageSemanticVersionUpdated) + 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 *ProtocolRegistryStorageSemanticVersionUpdatedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *ProtocolRegistryStorageSemanticVersionUpdatedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// ProtocolRegistryStorageSemanticVersionUpdated represents a SemanticVersionUpdated event raised by the ProtocolRegistryStorage contract. +type ProtocolRegistryStorageSemanticVersionUpdated struct { + PreviousSemanticVersion string + SemanticVersion string + Raw types.Log // Blockchain specific contextual infos +} + +// FilterSemanticVersionUpdated is a free log retrieval operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) FilterSemanticVersionUpdated(opts *bind.FilterOpts) (*ProtocolRegistryStorageSemanticVersionUpdatedIterator, error) { + + logs, sub, err := _ProtocolRegistryStorage.contract.FilterLogs(opts, "SemanticVersionUpdated") + if err != nil { + return nil, err + } + return &ProtocolRegistryStorageSemanticVersionUpdatedIterator{contract: _ProtocolRegistryStorage.contract, event: "SemanticVersionUpdated", logs: logs, sub: sub}, nil +} + +// WatchSemanticVersionUpdated is a free log subscription operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) WatchSemanticVersionUpdated(opts *bind.WatchOpts, sink chan<- *ProtocolRegistryStorageSemanticVersionUpdated) (event.Subscription, error) { + + logs, sub, err := _ProtocolRegistryStorage.contract.WatchLogs(opts, "SemanticVersionUpdated") + 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(ProtocolRegistryStorageSemanticVersionUpdated) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "SemanticVersionUpdated", 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 +} + +// ParseSemanticVersionUpdated is a log parse operation binding the contract event 0x769656e5cb3218f54758f85bd184d41e987639374d6cb9e244439cc9d1abe1e2. +// +// Solidity: event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion) +func (_ProtocolRegistryStorage *ProtocolRegistryStorageFilterer) ParseSemanticVersionUpdated(log types.Log) (*ProtocolRegistryStorageSemanticVersionUpdated, error) { + event := new(ProtocolRegistryStorageSemanticVersionUpdated) + if err := _ProtocolRegistryStorage.contract.UnpackLog(event, "SemanticVersionUpdated", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/pkg/bindings/ReleaseManager/binding.go b/pkg/bindings/ReleaseManager/binding.go index 0736dab5d7..2219009ec4 100644 --- a/pkg/bindings/ReleaseManager/binding.go +++ b/pkg/bindings/ReleaseManager/binding.go @@ -49,8 +49,8 @@ type OperatorSet struct { // ReleaseManagerMetaData contains all meta data concerning the ReleaseManager contract. var ReleaseManagerMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getLatestRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestUpgradeByTime\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMetadataURI\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalReleases\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publishMetadataURI\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"publishRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"release\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MetadataURIPublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasePublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"release\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidMetadataURI\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidUpgradeByTime\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustPublishMetadataURI\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoReleases\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60c060405234801561000f575f5ffd5b5060405161168938038061168983398101604081905261002e9161016a565b6001600160a01b0382166080528061004581610058565b60a0525061005161009e565b5050610294565b5f5f829050601f8151111561008b578260405163305a27a960e01b81526004016100829190610239565b60405180910390fd5b80516100968261026e565b179392505050565b5f54610100900460ff16156101055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610082565b5f5460ff90811614610154575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561017b575f5ffd5b82516001600160a01b0381168114610191575f5ffd5b60208401519092506001600160401b038111156101ac575f5ffd5b8301601f810185136101bc575f5ffd5b80516001600160401b038111156101d5576101d5610156565b604051601f8201601f19908116603f011681016001600160401b038111828210171561020357610203610156565b60405281815282820160200187101561021a575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b8051602080830151919081101561028e575f198160200360031b1b821691505b50919050565b60805160a0516113ce6102bb5f395f61047101525f818160cd01526109ae01526113ce5ff3fe608060405234801561000f575f5ffd5b506004361061009b575f3560e01c806366f409f71161006357806366f409f7146101545780637c09ea8214610175578063a9e0ed6814610188578063b053b56d146101b0578063d30eeb88146101c3575f5ffd5b80633acab5fc1461009f5780634657e26a146100c85780634840a67c14610107578063517e40681461011c57806354fd4d501461013f575b5f5ffd5b6100b26100ad366004610b2b565b6101e4565b6040516100bf9190610c17565b60405180910390f35b6100ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100bf565b61011a610115366004610c46565b610348565b005b61012f61012a366004610b2b565b610428565b60405190151581526020016100bf565b61014761046a565b6040516100bf9190610cc5565b610167610162366004610cd7565b61049a565b6040519081526020016100bf565b610167610183366004610cf1565b6104bd565b61019b610196366004610cd7565b610636565b60405163ffffffff90911681526020016100bf565b6101476101be366004610cd7565b6106bc565b6101d66101d1366004610cd7565b610765565b6040516100bf929190610d3d565b60408051808201909152606081525f602082015260015f6102048561090d565b81526020019081526020015f20828154811061022257610222610d5d565b905f5260205f2090600202016040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b82821015610325578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461029690610d71565b80601f01602080910402602001604051908101604052809291908181526020018280546102c290610d71565b801561030d5780601f106102e45761010080835404028352916020019161030d565b820191905f5260205f20905b8154815290600101906020018083116102f057829003601f168201915b5050505050815250508152602001906001019061025c565b505050908252506001919091015463ffffffff1660209091015290505b92915050565b6103556020840184610da3565b61035e81610970565b61037b5760405163932d94f760e01b815260040160405180910390fd5b5f82900361039c57604051630eec403f60e41b815260040160405180910390fd5b828260025f6103b86103b3368a90038a018a610cd7565b61090d565b81526020019081526020015f2091826103d2929190610e13565b50836040516103e19190610ecd565b60405180910390207f209e95fbe8dd14c5e1fbf791ee0a83234f45f20cb85504c7068d5ca0d6224588848460405161041a929190610f2c565b60405180910390a250505050565b5f5f6104338461049a565b90505f811161045557604051637a31a0a160e11b815260040160405180910390fd5b610460600182610f53565b9092149392505050565b60606104957f0000000000000000000000000000000000000000000000000000000000000000610a1a565b905090565b5f60015f6104a78461090d565b815260208101919091526040015f205492915050565b5f6104cb6020840184610da3565b6104d481610970565b6104f15760405163932d94f760e01b815260040160405180910390fd5b5f6001816105076103b336899003890189610cd7565b81526020019081526020015f20905060025f61052d878036038101906103b39190610cd7565b81526020019081526020015f20805461054590610d71565b90505f036105665760405163413e6e5760e11b815260040160405180910390fd5b6105766040850160208601610f66565b63ffffffff16158061059d5750426105946040860160208701610f66565b63ffffffff1610155b6105ba5760405163325ec75f60e01b815260040160405180910390fd5b80546001810182555f82815260209020909350849060028502016105de82826110a4565b505082856040516105ef9190610ecd565b60405180910390207f2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd386604051610626919061122f565b60405180910390a3505092915050565b5f5f60015f6106448561090d565b81526020019081526020015f2090505f81805490501161067757604051637a31a0a160e11b815260040160405180910390fd5b80545f9061068790600190610f53565b905081818154811061069b5761069b610d5d565b5f91825260209091206001600290920201015463ffffffff16949350505050565b606060025f6106ca8461090d565b81526020019081526020015f2080546106e290610d71565b80601f016020809104026020016040519081016040528092919081815260200182805461070e90610d71565b80156107595780601f1061073057610100808354040283529160200191610759565b820191905f5260205f20905b81548152906001019060200180831161073c57829003601f168201915b50505050509050919050565b60408051808201909152606081525f60208201819052905f60015f6107898661090d565b81526020019081526020015f2090505f8180549050116107bc57604051637a31a0a160e11b815260040160405180910390fd5b80545f906107cc90600190610f53565b9050808282815481106107e1576107e1610d5d565b905f5260205f209060020201806040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b828210156108e5578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461085690610d71565b80601f016020809104026020016040519081016040528092919081815260200182805461088290610d71565b80156108cd5780601f106108a4576101008083540402835291602001916108cd565b820191905f5260205f20905b8154815290600101906020018083116108b057829003601f168201915b5050505050815250508152602001906001019061081c565b505050908252506001919091015463ffffffff16602090910152919791965090945050505050565b5f815f0151826020015163ffffffff1660405160200161095892919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261034290611356565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156109f6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103429190611379565b60605f610a2683610a57565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f60ff8216601f81111561034257604051632cd44ac360e21b815260040160405180910390fd5b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b0381168114610aa8575f5ffd5b919050565b63ffffffff81168114610abe575f5ffd5b50565b8035610aa881610aad565b5f60408284031215610adc575f5ffd5b6040516040810181811067ffffffffffffffff82111715610aff57610aff610a7e565b604052905080610b0e83610a92565b81526020830135610b1e81610aad565b6020919091015292915050565b5f5f60608385031215610b3c575f5ffd5b610b468484610acc565b946040939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6040830182516040855281815180845260608701915060608160051b88010193506020830192505f5b81811015610bf457605f198886030183528351805186526020810151905060406020870152610bde6040870182610b54565b9550506020938401939290920191600101610bac565b505050506020830151610c0f602086018263ffffffff169052565b509392505050565b602081525f610c296020830184610b82565b9392505050565b5f60408284031215610c40575f5ffd5b50919050565b5f5f5f60608486031215610c58575f5ffd5b610c628585610c30565b9250604084013567ffffffffffffffff811115610c7d575f5ffd5b8401601f81018613610c8d575f5ffd5b803567ffffffffffffffff811115610ca3575f5ffd5b866020828401011115610cb4575f5ffd5b939660209190910195509293505050565b602081525f610c296020830184610b54565b5f60408284031215610ce7575f5ffd5b610c298383610acc565b5f5f60608385031215610d02575f5ffd5b610d0c8484610c30565b9150604083013567ffffffffffffffff811115610d27575f5ffd5b610d3385828601610c30565b9150509250929050565b828152604060208201525f610d556040830184610b82565b949350505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c90821680610d8557607f821691505b602082108103610c4057634e487b7160e01b5f52602260045260245ffd5b5f60208284031215610db3575f5ffd5b610c2982610a92565b5b81811015610dd0575f8155600101610dbd565b5050565b601f821115610e0e57805f5260205f20601f840160051c81016020851015610df95750805b610e0b601f850160051c830182610dbc565b50505b505050565b67ffffffffffffffff831115610e2b57610e2b610a7e565b610e3f83610e398354610d71565b83610dd4565b5f601f841160018114610e70575f8515610e595750838201355b5f19600387901b1c1916600186901b178355610e0b565b5f83815260208120601f198716915b82811015610e9f5786850135825560209485019460019092019101610e7f565b5086821015610ebb575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03610ede83610a92565b1681525f6020830135610ef081610aad565b63ffffffff16602083015250604001919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610d55602083018486610f04565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561034257610342610f3f565b5f60208284031215610f76575f5ffd5b8135610c2981610aad565b5f8235603e19833603018112610f95575f5ffd5b9190910192915050565b81358155600181016020830135601e19843603018112610fbd575f5ffd5b8301803567ffffffffffffffff81118015610fd6575f5ffd5b813603602084011315610fe7575f5ffd5b5f905050610fff81610ff98554610d71565b85610dd4565b5f601f821160018114611033575f831561101c5750838201602001355b5f19600385901b1c1916600184901b17855561108f565b5f85815260208120601f198516915b8281101561106457602085880181013583559485019460019092019101611042565b5084821015611083575f1960f88660031b161c19602085880101351681555b505060018360011b0185555b50505050505050565b5f813561034281610aad565b8135601e198336030181126110b7575f5ffd5b8201803567ffffffffffffffff8111156110cf575f5ffd5b6020820191508060051b36038213156110e6575f5ffd5b680100000000000000008111156110ff576110ff610a7e565b8254818455808210156111c3576001600160ff1b038116811461112457611124610f3f565b6001600160ff1b038216821461113c5761113c610f3f565b835f5260205f208160011b81018360011b820191505b808210156111c0575f825560018201805461116c90610d71565b80156111b357601f811160018114611186575f83556111b1565b5f838152602090206111a3601f840160051c820160018301610dbc565b505f83815260208120818555555b505b5050600282019150611152565b50505b505f8381526020812083915b83811015611200576111ea6111e48487610f81565b83610f9f565b60209290920191600291909101906001016111cf565b5050505050610dd061121460208401611098565b6001830163ffffffff821663ffffffff198254161781555050565b602081525f606082018335601e1985360301811261124b575f5ffd5b840180356020820167ffffffffffffffff821115611267575f5ffd5b8160051b803603821315611279575f5ffd5b604060208801529382905260809386018401935f908701605e1936869003015b8483101561133357888703607f1901825283358181126112b7575f5ffd5b860160208101358852604081013536829003603e190181126112d7575f5ffd5b0160408101906020013567ffffffffffffffff8111156112f5575f5ffd5b803603821315611303575f5ffd5b604060208a015261131860408a018284610f04565b98505050602084019350602082019150600183019250611299565b50505050505061134560208501610ac1565b63ffffffff81166040850152610c0f565b80516020808301519190811015610c40575f1960209190910360031b1b16919050565b5f60208284031215611389575f5ffd5b81518015158114610c29575f5ffdfea2646970667358221220052ed1bd5390ae538172254ad9b8c5cdcbd68a93cd2964671194cfb528248f4264736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getLatestRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getLatestUpgradeByTime\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMetadataURI\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTotalReleases\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isValidRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"publishMetadataURI\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"internalType\":\"string\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"publishRelease\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"release\",\"type\":\"tuple\",\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"releaseId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MetadataURIPublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"metadataURI\",\"type\":\"string\",\"indexed\":false,\"internalType\":\"string\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ReleasePublished\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":true,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"releaseId\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"release\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIReleaseManagerTypes.Release\",\"components\":[{\"name\":\"artifacts\",\"type\":\"tuple[]\",\"internalType\":\"structIReleaseManagerTypes.Artifact[]\",\"components\":[{\"name\":\"digest\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"registry\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"name\":\"upgradeByTime\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"InvalidMetadataURI\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidUpgradeByTime\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MustPublishMetadataURI\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NoReleases\",\"inputs\":[]}]", + Bin: "0x60a060405234801561000f575f5ffd5b5060405161146238038061146283398101604081905261002e91610105565b6001600160a01b038116608052610043610049565b50610132565b5f54610100900460ff16156100b45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610103575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b5f60208284031215610115575f5ffd5b81516001600160a01b038116811461012b575f5ffd5b9392505050565b6080516113126101505f395f818160c2015261095a01526113125ff3fe608060405234801561000f575f5ffd5b5060043610610090575f3560e01c806366f409f71161006357806366f409f7146101345780637c09ea8214610155578063a9e0ed6814610168578063b053b56d14610190578063d30eeb88146101b0575f5ffd5b80633acab5fc146100945780634657e26a146100bd5780634840a67c146100fc578063517e406814610111575b5f5ffd5b6100a76100a2366004610a6f565b6101d1565b6040516100b49190610b5b565b60405180910390f35b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016100b4565b61010f61010a366004610b8a565b610335565b005b61012461011f366004610a6f565b6103f8565b60405190151581526020016100b4565b610147610142366004610c09565b61043a565b6040519081526020016100b4565b610147610163366004610c23565b61045d565b61017b610176366004610c09565b6105b9565b60405163ffffffff90911681526020016100b4565b6101a361019e366004610c09565b61063f565b6040516100b49190610c6f565b6101c36101be366004610c09565b6106e8565b6040516100b4929190610c81565b60408051808201909152606081525f602082015260015f6101f185610890565b81526020019081526020015f20828154811061020f5761020f610ca1565b905f5260205f2090600202016040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b82821015610312578382905f5260205f2090600202016040518060400160405290815f820154815260200160018201805461028390610cb5565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610cb5565b80156102fa5780601f106102d1576101008083540402835291602001916102fa565b820191905f5260205f20905b8154815290600101906020018083116102dd57829003601f168201915b50505050508152505081526020019060010190610249565b505050908252506001919091015463ffffffff1660209091015290505b92915050565b6103426020840184610ce7565b61034b816108f3565b5f82900361036c57604051630eec403f60e41b815260040160405180910390fd5b828260025f610388610383368a90038a018a610c09565b610890565b81526020019081526020015f2091826103a2929190610d57565b50836040516103b19190610e11565b60405180910390207f209e95fbe8dd14c5e1fbf791ee0a83234f45f20cb85504c7068d5ca0d622458884846040516103ea929190610e70565b60405180910390a250505050565b5f5f6104038461043a565b90505f811161042557604051637a31a0a160e11b815260040160405180910390fd5b610430600182610e97565b9092149392505050565b5f60015f61044784610890565b815260208101919091526040015f205492915050565b5f61046b6020840184610ce7565b610474816108f3565b5f60018161048a61038336899003890189610c09565b81526020019081526020015f20905060025f6104b0878036038101906103839190610c09565b81526020019081526020015f2080546104c890610cb5565b90505f036104e95760405163413e6e5760e11b815260040160405180910390fd5b6104f96040850160208601610eaa565b63ffffffff1615806105205750426105176040860160208701610eaa565b63ffffffff1610155b61053d5760405163325ec75f60e01b815260040160405180910390fd5b80546001810182555f82815260209020909350849060028502016105618282610fe8565b505082856040516105729190610e11565b60405180910390207f2decd15222f7c4a8c3d4d2e14dcfdc5a0b52eb2d4b81796bfd010ee5cd972fd3866040516105a99190611173565b60405180910390a3505092915050565b5f5f60015f6105c785610890565b81526020019081526020015f2090505f8180549050116105fa57604051637a31a0a160e11b815260040160405180910390fd5b80545f9061060a90600190610e97565b905081818154811061061e5761061e610ca1565b5f91825260209091206001600290920201015463ffffffff16949350505050565b606060025f61064d84610890565b81526020019081526020015f20805461066590610cb5565b80601f016020809104026020016040519081016040528092919081815260200182805461069190610cb5565b80156106dc5780601f106106b3576101008083540402835291602001916106dc565b820191905f5260205f20905b8154815290600101906020018083116106bf57829003601f168201915b50505050509050919050565b60408051808201909152606081525f60208201819052905f60015f61070c86610890565b81526020019081526020015f2090505f81805490501161073f57604051637a31a0a160e11b815260040160405180910390fd5b80545f9061074f90600190610e97565b90508082828154811061076457610764610ca1565b905f5260205f209060020201806040518060400160405290815f8201805480602002602001604051908101604052809291908181526020015f905b82821015610868578382905f5260205f2090600202016040518060400160405290815f82015481526020016001820180546107d990610cb5565b80601f016020809104026020016040519081016040528092919081815260200182805461080590610cb5565b80156108505780601f1061082757610100808354040283529160200191610850565b820191905f5260205f20905b81548152906001019060200180831161083357829003601f168201915b5050505050815250508152602001906001019061079f565b505050908252506001919091015463ffffffff16602090910152919791965090945050505050565b5f815f0151826020015163ffffffff166040516020016108db92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261032f9061129a565b6108fc8161091c565b6109195760405163932d94f760e01b815260040160405180910390fd5b50565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa1580156109a1573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061032f91906112bd565b634e487b7160e01b5f52604160045260245ffd5b80356001600160a01b03811681146109ef575f5ffd5b919050565b63ffffffff81168114610919575f5ffd5b80356109ef816109f4565b5f60408284031215610a20575f5ffd5b6040516040810181811067ffffffffffffffff82111715610a4357610a436109c5565b604052905080610a52836109d9565b81526020830135610a62816109f4565b6020919091015292915050565b5f5f60608385031215610a80575f5ffd5b610a8a8484610a10565b946040939093013593505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f6040830182516040855281815180845260608701915060608160051b88010193506020830192505f5b81811015610b3857605f198886030183528351805186526020810151905060406020870152610b226040870182610a98565b9550506020938401939290920191600101610af0565b505050506020830151610b53602086018263ffffffff169052565b509392505050565b602081525f610b6d6020830184610ac6565b9392505050565b5f60408284031215610b84575f5ffd5b50919050565b5f5f5f60608486031215610b9c575f5ffd5b610ba68585610b74565b9250604084013567ffffffffffffffff811115610bc1575f5ffd5b8401601f81018613610bd1575f5ffd5b803567ffffffffffffffff811115610be7575f5ffd5b866020828401011115610bf8575f5ffd5b939660209190910195509293505050565b5f60408284031215610c19575f5ffd5b610b6d8383610a10565b5f5f60608385031215610c34575f5ffd5b610c3e8484610b74565b9150604083013567ffffffffffffffff811115610c59575f5ffd5b610c6585828601610b74565b9150509250929050565b602081525f610b6d6020830184610a98565b828152604060208201525f610c996040830184610ac6565b949350505050565b634e487b7160e01b5f52603260045260245ffd5b600181811c90821680610cc957607f821691505b602082108103610b8457634e487b7160e01b5f52602260045260245ffd5b5f60208284031215610cf7575f5ffd5b610b6d826109d9565b5b81811015610d14575f8155600101610d01565b5050565b601f821115610d5257805f5260205f20601f840160051c81016020851015610d3d5750805b610d4f601f850160051c830182610d00565b50505b505050565b67ffffffffffffffff831115610d6f57610d6f6109c5565b610d8383610d7d8354610cb5565b83610d18565b5f601f841160018114610db4575f8515610d9d5750838201355b5f19600387901b1c1916600186901b178355610d4f565b5f83815260208120601f198716915b82811015610de35786850135825560209485019460019092019101610dc3565b5086821015610dff575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03610e22836109d9565b1681525f6020830135610e34816109f4565b63ffffffff16602083015250604001919050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610c99602083018486610e48565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561032f5761032f610e83565b5f60208284031215610eba575f5ffd5b8135610b6d816109f4565b5f8235603e19833603018112610ed9575f5ffd5b9190910192915050565b81358155600181016020830135601e19843603018112610f01575f5ffd5b8301803567ffffffffffffffff81118015610f1a575f5ffd5b813603602084011315610f2b575f5ffd5b5f905050610f4381610f3d8554610cb5565b85610d18565b5f601f821160018114610f77575f8315610f605750838201602001355b5f19600385901b1c1916600184901b178555610fd3565b5f85815260208120601f198516915b82811015610fa857602085880181013583559485019460019092019101610f86565b5084821015610fc7575f1960f88660031b161c19602085880101351681555b505060018360011b0185555b50505050505050565b5f813561032f816109f4565b8135601e19833603018112610ffb575f5ffd5b8201803567ffffffffffffffff811115611013575f5ffd5b6020820191508060051b360382131561102a575f5ffd5b68010000000000000000811115611043576110436109c5565b825481845580821015611107576001600160ff1b038116811461106857611068610e83565b6001600160ff1b038216821461108057611080610e83565b835f5260205f208160011b81018360011b820191505b80821015611104575f82556001820180546110b090610cb5565b80156110f757601f8111600181146110ca575f83556110f5565b5f838152602090206110e7601f840160051c820160018301610d00565b505f83815260208120818555555b505b5050600282019150611096565b50505b505f8381526020812083915b838110156111445761112e6111288487610ec5565b83610ee3565b6020929092019160029190910190600101611113565b5050505050610d1461115860208401610fdc565b6001830163ffffffff821663ffffffff198254161781555050565b602081525f606082018335601e1985360301811261118f575f5ffd5b840180356020820167ffffffffffffffff8211156111ab575f5ffd5b8160051b8036038213156111bd575f5ffd5b604060208801529382905260809386018401935f908701605e1936869003015b8483101561127757888703607f1901825283358181126111fb575f5ffd5b860160208101358852604081013536829003603e1901811261121b575f5ffd5b0160408101906020013567ffffffffffffffff811115611239575f5ffd5b803603821315611247575f5ffd5b604060208a015261125c60408a018284610e48565b985050506020840193506020820191506001830192506111dd565b50505050505061128960208501610a05565b63ffffffff81166040850152610b53565b80516020808301519190811015610b84575f1960209190910360031b1b16919050565b5f602082840312156112cd575f5ffd5b81518015158114610b6d575f5ffdfea2646970667358221220a0dc8b14f16eeefb9026f29c70a2440dc94429f85af267781cee6901cfe7ae5264736f6c634300081e0033", } // ReleaseManagerABI is the input ABI used to generate the binding from. @@ -62,7 +62,7 @@ var ReleaseManagerABI = ReleaseManagerMetaData.ABI var ReleaseManagerBin = ReleaseManagerMetaData.Bin // DeployReleaseManager deploys a new Ethereum contract, binding an instance of ReleaseManager to it. -func DeployReleaseManager(auth *bind.TransactOpts, backend bind.ContractBackend, _permissionController common.Address, _version string) (common.Address, *types.Transaction, *ReleaseManager, error) { +func DeployReleaseManager(auth *bind.TransactOpts, backend bind.ContractBackend, _permissionController common.Address) (common.Address, *types.Transaction, *ReleaseManager, error) { parsed, err := ReleaseManagerMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -71,7 +71,7 @@ func DeployReleaseManager(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReleaseManagerBin), backend, _permissionController, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(ReleaseManagerBin), backend, _permissionController) if err != nil { return common.Address{}, nil, nil, err } @@ -438,37 +438,6 @@ func (_ReleaseManager *ReleaseManagerCallerSession) PermissionController() (comm return _ReleaseManager.Contract.PermissionController(&_ReleaseManager.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ReleaseManager *ReleaseManagerCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _ReleaseManager.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ReleaseManager *ReleaseManagerSession) Version() (string, error) { - return _ReleaseManager.Contract.Version(&_ReleaseManager.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_ReleaseManager *ReleaseManagerCallerSession) Version() (string, error) { - return _ReleaseManager.Contract.Version(&_ReleaseManager.CallOpts) -} - // PublishMetadataURI is a paid mutator transaction binding the contract method 0x4840a67c. // // Solidity: function publishMetadataURI((address,uint32) operatorSet, string metadataURI) returns() diff --git a/pkg/bindings/RewardsCoordinator/binding.go b/pkg/bindings/RewardsCoordinator/binding.go index 5b5c6b9c55..3755f4ab42 100644 --- a/pkg/bindings/RewardsCoordinator/binding.go +++ b/pkg/bindings/RewardsCoordinator/binding.go @@ -71,7 +71,6 @@ type IRewardsCoordinatorTypesRewardsCoordinatorConstructorParams struct { MAXRETROACTIVELENGTH uint32 MAXFUTURELENGTH uint32 GENESISREWARDSTIMESTAMP uint32 - Version string } // IRewardsCoordinatorTypesRewardsMerkleClaim is an auto generated low-level Go binding around an user-defined struct. @@ -114,8 +113,8 @@ type OperatorSet struct { // RewardsCoordinatorMetaData contains all meta data concerning the RewardsCoordinator contract. var RewardsCoordinatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams\",\"components\":[{\"name\":\"delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_REWARDS_DURATION\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_RETROACTIVE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_FUTURE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"version\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"totalClaimed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedOperatorSetRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionNonce\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", - Bin: "0x6101e0604052348015610010575f5ffd5b50604051614bd4380380614bd483398101604081905261002f9161034a565b610140810151608082015182516020840151604085015160a086015160c087015160e08801516101008901516101208a015160608b01516001600160a01b03811661008d576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03166080526100a38582610465565b63ffffffff16156100c757604051630e06bd3160e01b815260040160405180910390fd5b6100d46201518086610465565b63ffffffff16156100f85760405163223c7b3960e11b815260040160405180910390fd5b6001600160a01b0397881660a05295871660c05293861660e05263ffffffff9283166101005290821661012052811661014052908116610160521661018052166101a05261014581610158565b6101c0525061015261019e565b506104f3565b5f5f829050601f8151111561018b578260405163305a27a960e01b81526004016101829190610498565b60405180910390fd5b8051610196826104cd565b179392505050565b5f54610100900460ff16156102055760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610182565b5f5460ff90811614610254575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b634e487b7160e01b5f52604160045260245ffd5b60405161016081016001600160401b038111828210171561028d5761028d610256565b60405290565b80516001600160a01b03811681146102a9575f5ffd5b919050565b805163ffffffff811681146102a9575f5ffd5b5f82601f8301126102d0575f5ffd5b81516001600160401b038111156102e9576102e9610256565b604051601f8201601f19908116603f011681016001600160401b038111828210171561031757610317610256565b60405281815283820160200185101561032e575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f6020828403121561035a575f5ffd5b81516001600160401b0381111561036f575f5ffd5b82016101608185031215610381575f5ffd5b61038961026a565b61039282610293565b81526103a060208301610293565b60208201526103b160408301610293565b60408201526103c260608301610293565b60608201526103d360808301610293565b60808201526103e460a083016102ae565b60a08201526103f560c083016102ae565b60c082015261040660e083016102ae565b60e082015261041861010083016102ae565b61010082015261042b61012083016102ae565b6101208201526101408201516001600160401b0381111561044a575f5ffd5b610456868285016102c1565b61014083015250949350505050565b5f63ffffffff83168061048657634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160691505092915050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156104ed575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516146066105ce5f395f61138701525f81816105f001526124b301525f81816104a4015261341101525f81816103f3015261299801525f818161055201526133cf01525f818161087e01526132b901525f81816107bf01528181613309015261337d01525f81816108d201528181610adc01528181611bff0152611e8c01525f818161057901526134ac01525f81816109450152611b6f01525f81816107510152818161283d01526131ea01526146065ff3fe608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f000000000000000000000000000000000000000000000000000000000000000081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f000000000000000000000000000000000000000000000000000000000000000081565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f0000000000000000000000000000000000000000000000000000000000000000612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f000000000000000000000000000000000000000000000000000000000000000016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000000008261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000000008361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea264697066735822122017addec35ab3e2f446827c6467eb8cd1dc85fee1e287a978c43f77213e5cdd0d64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"params\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams\",\"components\":[{\"name\":\"delegationManager\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"permissionController\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"},{\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_REWARDS_DURATION\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_RETROACTIVE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"MAX_FUTURE_LENGTH\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"totalClaimed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedOperatorSetRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"permissionController\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPermissionController\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionNonce\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidPermissions\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidProofLength\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + Bin: "0x6101c0604052348015610010575f5ffd5b506040516148fa3803806148fa83398101604081905261002f91610263565b608081015181516020830151604084015160a085015160c086015160e087015161010088015161012089015160608a01516001600160a01b038116610087576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261009d858261032d565b63ffffffff16156100c157604051630e06bd3160e01b815260040160405180910390fd5b6100ce620151808661032d565b63ffffffff16156100f25760405163223c7b3960e11b815260040160405180910390fd5b6001600160a01b0397881660a05295871660c05293861660e05263ffffffff9283166101005290821661012052811661014052908116610160521661018052166101a05261013e610144565b50610360565b5f54610100900460ff16156101af5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff908116146101fe575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60405161014081016001600160401b038111828210171561022f57634e487b7160e01b5f52604160045260245ffd5b60405290565b80516001600160a01b038116811461024b575f5ffd5b919050565b805163ffffffff8116811461024b575f5ffd5b5f610140828403128015610275575f5ffd5b5061027e610200565b61028783610235565b815261029560208401610235565b60208201526102a660408401610235565b60408201526102b760608401610235565b60608201526102c860808401610235565b60808201526102d960a08401610250565b60a08201526102ea60c08401610250565b60c08201526102fb60e08401610250565b60e082015261030d6101008401610250565b6101008201526103206101208401610250565b6101208201529392505050565b5f63ffffffff83168061034e57634e487b7160e01b5f52601260045260245ffd5b8063ffffffff84160691505092915050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516144c96104315f395f81816105e5015261311801525f818161049901526132fb01525f81816103e8015261281601525f818161054701526132b901525f818161085e01526131a301525f818161079f015281816131f3015261326701525f81816108b201528181610a9f01528181611b1e0152611d8e01525f818161056e015261339601525f81816109250152611a8e01525f8181610731015281816126bb015261302b01526144c95ff3fe608060405234801561000f575f5ffd5b50600436106103a8575f3560e01c80638da5cb5b116101ea578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a13578063fbf1e2c114610a26578063fce36c7d14610a39578063ff9f6cce14610a4c575f5ffd5b8063f6efbb59146109c7578063f74e8eac146109da578063f8cd8448146109ed578063f96abf2e14610a00575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610947578063f22cef8514610974578063f2f07ab414610987578063f2fde38b146109b4575f5ffd5b8063de02e503146108e7578063e063f81f146108fa578063e810ce211461090d578063ea4d3c9b14610920575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610859578063c46db60614610880578063ca8aa7c7146108ad578063dcbb03b3146108d4575f5ffd5b8063a50a1d9c146107e7578063aebd8bae146107fa578063b3dbb0e014610827578063bb7e451f1461083a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107875780639d45c2811461079a5780639de4b35f146107c1578063a0169ddd146107d4575f5ffd5b80638da5cb5b146107535780639104c319146107645780639be3d4e41461077f575f5ffd5b80634596021c116102d65780635e9d83481161026b5780637b8f8b051161023b5780637b8f8b05146106e7578063863cb9a9146106ef578063865c695314610702578063886f11951461072c575f5ffd5b80635e9d83481461068a57806363f6a7981461069d5780636d21117e146106b2578063715018a6146106df575f5ffd5b806358baaa3e116102a657806358baaa3e14610644578063595c6a67146106575780635ac86ab71461065f5780635c975abb14610682575f5ffd5b80634596021c146105cd5780634657e26a146105e05780634b943960146106075780634d18cc351461062d575f5ffd5b8063149bc8721161034c57806339b70e381161031c57806339b70e38146105695780633a8c0786146105905780633ccc861d146105a75780633efe1db6146105ba575f5ffd5b8063149bc872146104ce5780632b9f64a4146104ef57806336af41fa1461052f57806337838ed014610542575f5ffd5b80630e9a53cf116103875780630e9a53cf146104345780630eb3834514610481578063131433b414610494578063136439dd146104bb575f5ffd5b806218572c146103ac57806304a0c502146103e35780630ca298991461041f575b5f5ffd5b6103ce6103ba3660046138f6565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61040a7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016103da565b61043261042d36600461396e565b610a5f565b005b61043c610ce8565b6040516103da91905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043261048f3660046139ca565b610de8565b61040a7f000000000000000000000000000000000000000000000000000000000000000081565b6104326104c9366004613a01565b610e68565b6104e16104dc366004613a18565b610ea2565b6040519081526020016103da565b6105176104fd3660046138f6565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103da565b61043261053d366004613a32565b610f17565b61040a7f000000000000000000000000000000000000000000000000000000000000000081565b6105177f000000000000000000000000000000000000000000000000000000000000000081565b60cb5461040a90600160a01b900463ffffffff1681565b6104326105b5366004613a81565b611088565b6104326105c8366004613ad7565b6110af565b6104326105db366004613b01565b611285565b6105177f000000000000000000000000000000000000000000000000000000000000000081565b61061a6106153660046138f6565b6112e8565b60405161ffff90911681526020016103da565b60cb5461040a90600160c01b900463ffffffff1681565b610432610652366004613b53565b611343565b610432611357565b6103ce61066d366004613b6c565b606654600160ff9092169190911b9081161490565b6066546104e1565b6103ce610698366004613b8c565b61136b565b60cb5461061a90600160e01b900461ffff1681565b6103ce6106c0366004613bbd565b60cf60209081525f928352604080842090915290825290205460ff1681565b6104326113f6565b60ca546104e1565b6104326106fd3660046138f6565b611407565b6104e1610710366004613be7565b60cd60209081525f928352604080842090915290825290205481565b6105177f000000000000000000000000000000000000000000000000000000000000000081565b6033546001600160a01b0316610517565b61051773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b61043c611418565b610432610795366004613c13565b6114b4565b61040a7f000000000000000000000000000000000000000000000000000000000000000081565b61061a6107cf366004613c4a565b611612565b6104326107e23660046138f6565b611695565b6104326107f5366004613c86565b6116a0565b6103ce610808366004613bbd565b60d260209081525f928352604080842090915290825290205460ff1681565b610432610835366004613c9f565b6116b1565b6104e16108483660046138f6565b60ce6020525f908152604090205481565b61040a7f000000000000000000000000000000000000000000000000000000000000000081565b6103ce61088e366004613bbd565b60d060209081525f928352604080842090915290825290205460ff1681565b6105177f000000000000000000000000000000000000000000000000000000000000000081565b6104326108e2366004613cc9565b6117bf565b61043c6108f5366004613a01565b6118ef565b61061a610908366004613be7565b61197f565b61040a61091b366004613a01565b6119e4565b6105177f000000000000000000000000000000000000000000000000000000000000000081565b6103ce610955366004613bbd565b60d360209081525f928352604080842090915290825290205460ff1681565b610432610982366004613be7565b611a65565b6103ce610995366004613bbd565b60d760209081525f928352604080842090915290825290205460ff1681565b6104326109c23660046138f6565b611bb2565b6104326109d5366004613d0d565b611c2d565b6104326109e8366004613d6b565b611d62565b6104e16109fb366004613a18565b611f0c565b610432610a0e366004613b53565b611f1c565b610432610a21366004613a01565b61204d565b60cb54610517906001600160a01b031681565b610432610a47366004613a32565b6120ba565b610432610a5a366004613a32565b6121eb565b6009610a6a8161234c565b610a7760208501856138f6565b610a8081612377565b610a8861239d565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890610ad4908890600401613dd6565b602060405180830381865afa158015610aef573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190613de4565b610b3057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610cd65736858583818110610b4d57610b4d613dff565b9050602002810190610b5f9190613e13565b90505f60ce81610b7260208b018b6138f6565b6001600160a01b031681526020808201929092526040015f90812054925090610b9d908a018a6138f6565b8284604051602001610bb19392919061403b565b6040516020818303038152906040528051906020012090505f610bd3846123f6565b9050600160d75f610be760208e018e6138f6565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c2683600161407e565b60ce5f610c3660208e018e6138f6565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610c9793929190614091565b60405180910390a3610cc6333083610cb56040890160208a016138f6565b6001600160a01b03169291906125e1565b505060019092019150610b329050565b50610ce16001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dc0575f60ca610d236001846140b6565b81548110610d3357610d33613dff565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610da25750806040015163ffffffff164210155b15610dad5792915050565b5080610db8816140c9565b915050610d0f565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610df061264c565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610e706126a6565b6066548181168114610e955760405163c61dca5d60e01b815260040160405180910390fd5b610e9e82612749565b5050565b5f80610eb160208401846138f6565b8360200135604051602001610efa9392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f228161234c565b335f90815260d1602052604090205460ff16610f5157604051635c427cd960e01b815260040160405180910390fd5b610f5961239d565b5f5b828110156110785736848483818110610f7657610f76613dff565b9050602002810190610f8891906140de565b335f81815260ce60209081526040808320549051949550939192610fb29290918591879101614170565b604051602081830303815290604052805190602001209050610fd383612786565b335f90815260d0602090815260408083208484529091529020805460ff1916600190811790915561100590839061407e565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf2704829061104c908890614196565b60405180910390a461106d333060408601803590610cb590602089016138f6565b505050600101610f5b565b506110836001609755565b505050565b60026110938161234c565b61109b61239d565b6110a58383612871565b6110836001609755565b60036110ba8161234c565b60cb546001600160a01b031633146110e557604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161111857604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061113e576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061115d90600160a01b900463ffffffff16426141a8565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112908161234c565b61129861239d565b5f5b838110156112d7576112cf8585838181106112b7576112b7613dff565b90506020028101906112c991906141c4565b84612871565b60010161129a565b506112e26001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261133d90612af9565b92915050565b61134b61264c565b61135481612b69565b50565b61135f6126a6565b6113695f19612749565b565b5f6113ee8260ca61137f6020830183613b53565b63ffffffff168154811061139557611395613dff565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612bda565b506001919050565b6113fe61264c565b6113695f612d7d565b61140f61264c565b61135481612dce565b604080516080810182525f80825260208201819052918101829052606081019190915260ca805461144b906001906140b6565b8154811061145b5761145b613dff565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b60056114bf8161234c565b836114c981612377565b6114d161239d565b5f5b83811015610cd657368585838181106114ee576114ee613dff565b90506020028101906115009190613e13565b6001600160a01b0388165f90815260ce6020908152604080832054905193945092611531918b91859187910161403b565b6040516020818303038152906040528051906020012090505f611553846123f6565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061159190849061407e565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e0906115e49088908a906141d8565b60405180910390a4611602333083610cb56040890160208a016138f6565b5050600190920191506114d39050565b6001600160a01b0382165f90815260d66020526040812061168e9082611645611640368790038701876141f0565b612e29565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612af9565b9392505050565b33610e9e8183612e8c565b6116a861264c565b61135481612eef565b60076116bc8161234c565b826116c681612377565b60cb545f906116e290600160a01b900463ffffffff16426141a8565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff16908201529192509061173b90612af9565b6001600160a01b0387165f90815260d560205260409020909150611760908684612f5a565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066117ca8161234c565b836117d481612377565b60cb545f906117f090600160a01b900463ffffffff16426141a8565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061185790612af9565b6001600160a01b038089165f90815260d460209081526040808320938b16835292905220909150611889908684612f5a565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca828154811061192557611925613dff565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061168e90612af9565b60ca545f905b63ffffffff811615611a4b578260ca611a04600184614258565b63ffffffff1681548110611a1a57611a1a613dff565b905f5260205f2090600202015f015403611a395761168e600182614258565b80611a4381614274565b9150506119ea565b5060405163504570e360e01b815260040160405180910390fd5b81611a6f81612377565b6040516336b87bd760e11b81526001600160a01b0384811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611ad3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611af79190613de4565b80611b8b575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063ba1a84e590602401602060405180830381865afa158015611b65573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b899190614292565b115b611ba85760405163fb494ea160e01b815260040160405180910390fd5b6110838383612e8c565b611bba61264c565b6001600160a01b038116611c245760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61135481612d7d565b5f54610100900460ff1615808015611c4b57505f54600160ff909116105b80611c645750303b158015611c6457505f5460ff166001145b611cc75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611c1b565b5f805460ff191660011790558015611ce8575f805461ff0019166101001790555b611cf185612749565b611cfa86612d7d565b611d0384612dce565b611d0c83612b69565b611d1582612eef565b8015611d5a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611d6d8161234c565b83611d7781612377565b6040516304c1b8eb60e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063260dc75890611dc3908790600401613dd6565b602060405180830381865afa158015611dde573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e029190613de4565b611e1f57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611e3b90600160a01b900463ffffffff16426141a8565b6001600160a01b0387165f90815260d66020526040812091925090611e6d9082611645611640368b90038b018b6141f0565b6001600160a01b0388165f90815260d660205260408120919250611eb29190611e9e611640368b90038b018b6141f0565b81526020019081526020015f208684612f5a565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611efb94939291906142a9565b60405180910390a350505050505050565b5f6001610eb160208401846138f6565b6003611f278161234c565b60cb546001600160a01b03163314611f5257604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610611f7a576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff1681548110611f9457611f94613dff565b905f5260205f20906002020190508060010160089054906101000a900460ff1615611fd257604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061200357604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b612055613029565b6066548019821981161461207c5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6120c48161234c565b6120cc61239d565b5f5b8281101561107857368484838181106120e9576120e9613dff565b90506020028101906120fb91906140de565b335f81815260ce602090815260408083205490519495509391926121259290918591879101614170565b60405160208183030381529060405280519060200120905061214683612786565b335f90815260cf602090815260408083208484529091529020805460ff1916600190811790915561217890839061407e565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906121bf908890614196565b60405180910390a46121e0333060408601803590610cb590602089016138f6565b5050506001016120ce565b60046121f68161234c565b335f90815260d1602052604090205460ff1661222557604051635c427cd960e01b815260040160405180910390fd5b61222d61239d565b5f5b82811015611078573684848381811061224a5761224a613dff565b905060200281019061225c91906140de565b335f81815260ce602090815260408083205490519495509391926122869290918591879101614170565b6040516020818303038152906040528051906020012090506122a783612786565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556122d990839061407e565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b90612320908890614196565b60405180910390a4612341333060408601803590610cb590602089016138f6565b50505060010161222f565b606654600160ff83161b908116036113545760405163840a48d560e01b815260040160405180910390fd5b612380816130da565b6113545760405163932d94f760e01b815260040160405180910390fd5b6002609754036123ef5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611c1b565b6002609755565b5f61242961240483806142dd565b6124146080860160608701613b53565b61242460a0870160808801613b53565b613183565b5f61243760408401846142dd565b9050116124575760405163796cc52560e01b815260040160405180910390fd5b4261246860a0840160808501613b53565b6124786080850160608601613b53565b61248291906141a8565b63ffffffff16106124a65760405163150358a160e21b815260040160405180910390fd5b5f80805b6124b760408601866142dd565b90508110156125a857366124ce60408701876142dd565b838181106124de576124de613dff565b6040029190910191505f90506124f760208301836138f6565b6001600160a01b03160361251e57604051630863a45360e11b815260040160405180910390fd5b61252b60208201826138f6565b6001600160a01b0316836001600160a01b03161061255c576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612580576040516310eb483f60e21b815260040160405180910390fd5b61258d60208201826138f6565b925061259d60208201358561407e565b9350506001016124aa565b506f4b3b4ca85a86c47a098a223fffffffff8211156125da5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b03808516602483015283166044820152606481018290526112e29085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613481565b6033546001600160a01b031633146113695760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611c1b565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612708573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272c9190613de4565b61136957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6127b361279382806142dd565b6127a36080850160608601613b53565b61242460a0860160808701613b53565b5f8160400135116127d7576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561280c5760405163070b5a6f60e21b815260040160405180910390fd5b61283c63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000164261407e565b61284c6080830160608401613b53565b63ffffffff16111561135457604051637ee2b44360e01b815260040160405180910390fd5b5f60ca6128816020850185613b53565b63ffffffff168154811061289757612897613dff565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015290506128f78382612bda565b5f61290860808501606086016138f6565b6001600160a01b038082165f90815260cc6020526040902054919250168061292d5750805b336001600160a01b0382161461295657604051635c427cd960e01b815260040160405180910390fd5b5f5b61296560a0870187614322565b9050811015611d5a573661297c60e08801886142dd565b8381811061298c5761298c613dff565b6001600160a01b0387165f90815260cd6020908152604080832093029490940194509290915082906129c0908501856138f6565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612a065760405163aa385e8160e01b815260040160405180910390fd5b5f612a158260208501356140b6565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612a4290876138f6565b6001600160a01b031681526020808201929092526040015f2091909155612a839089908390612a73908701876138f6565b6001600160a01b03169190613554565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612ac760208901896138f6565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612958565b5f816040015163ffffffff165f1480612b2b5750815161ffff908116148015612b2b5750816040015163ffffffff1642105b15612b4357505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612b5c57815161133d565b506020015190565b919050565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612bfd57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612c2857604051631437a2bb60e31b815260040160405180910390fd5b612c3560c0830183614322565b9050612c4460a0840184614322565b905014612c64576040516343714afd60e01b815260040160405180910390fd5b612c7160e08301836142dd565b9050612c8060c0840184614322565b905014612ca0576040516343714afd60e01b815260040160405180910390fd5b8051612ccc90612cb66040850160208601613b53565b612cc36040860186614367565b86606001613584565b5f5b612cdb60a0840184614322565b905081101561108357612d756080840135612cf960a0860186614322565b84818110612d0957612d09613dff565b9050602002016020810190612d1e9190613b53565b612d2b60c0870187614322565b85818110612d3b57612d3b613dff565b9050602002810190612d4d9190614367565b612d5a60e08901896142dd565b87818110612d6a57612d6a613dff565b905060400201613628565b600101612cce565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff16604051602001612e7492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261133d906143a9565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff83161115612f815760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff164211612faf57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f03612fd657825461ffff191661ffff178355612fed565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613085573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130a991906143cc565b6001600160a01b0316336001600160a01b0316146113695760405163794821ff60e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb890608401602060405180830381865afa15801561315f573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133d9190613de4565b826131a15760405163796cc52560e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168163ffffffff1611156131ee57604051630dd0b9f560e21b815260040160405180910390fd5b6132187f0000000000000000000000000000000000000000000000000000000000000000826143fb565b63ffffffff161561323c5760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116132625760405163cb3f434d60e01b815260040160405180910390fd5b61328c7f0000000000000000000000000000000000000000000000000000000000000000836143fb565b63ffffffff16156132b057604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff16426132e991906140b6565b1115801561332357508163ffffffff167f000000000000000000000000000000000000000000000000000000000000000063ffffffff1611155b6133405760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611d5a575f86868381811061335e5761335e613dff565b61337492602060409092020190810191506138f6565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063663c1de490602401602060405180830381865afa1580156133dd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134019190613de4565b8061342857506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61344557604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b0316106134775760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613343565b5f6134d5826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166136669092919063ffffffff16565b905080515f14806134f55750808060200190518101906134f59190613de4565b6110835760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611c1b565b6040516001600160a01b03831660248201526044810182905261108390849063a9059cbb60e01b90606401612615565b61358f602083614422565b6001901b8463ffffffff16106135b75760405162c6c39d60e71b815260040160405180910390fd5b5f6135c182610ea2565b905061360b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff891661367c565b611d5a576040516369ca16c960e01b815260040160405180910390fd5b613633602083614422565b6001901b8463ffffffff161061365c5760405163054ff4df60e51b815260040160405180910390fd5b5f6135c182611f0c565b606061367484845f856136b1565b949350505050565b5f8361369b576040516329e7276760e11b815260040160405180910390fd5b836136a7868585613788565b1495945050505050565b6060824710156137125760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611c1b565b5f5f866001600160a01b0316858760405161372d9190614435565b5f6040518083038185875af1925050503d805f8114613767576040519150601f19603f3d011682016040523d82523d5f602084013e61376c565b606091505b509150915061377d87838387613845565b979650505050505050565b5f83515f0361379857508161168e565b602084516137a6919061444b565b156137c4576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613825576137db60028561444b565b5f036137fc57815f528086015160205260405f209150600284049350613813565b808601515f528160205260405f2091506002840493505b61381e60208261407e565b90506137c8565b508215613674576040516363df817160e01b815260040160405180910390fd5b606083156138b35782515f036138ac576001600160a01b0385163b6138ac5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611c1b565b5081613674565b61367483838151156138c85781518083602001fd5b8060405162461bcd60e51b8152600401611c1b919061445e565b6001600160a01b0381168114611354575f5ffd5b5f60208284031215613906575f5ffd5b813561168e816138e2565b5f60408284031215613921575f5ffd5b50919050565b5f5f83601f840112613937575f5ffd5b5081356001600160401b0381111561394d575f5ffd5b6020830191508360208260051b8501011115613967575f5ffd5b9250929050565b5f5f5f60608486031215613980575f5ffd5b61398a8585613911565b925060408401356001600160401b038111156139a4575f5ffd5b6139b086828701613927565b9497909650939450505050565b8015158114611354575f5ffd5b5f5f604083850312156139db575f5ffd5b82356139e6816138e2565b915060208301356139f6816139bd565b809150509250929050565b5f60208284031215613a11575f5ffd5b5035919050565b5f60408284031215613a28575f5ffd5b61168e8383613911565b5f5f60208385031215613a43575f5ffd5b82356001600160401b03811115613a58575f5ffd5b613a6485828601613927565b90969095509350505050565b5f6101008284031215613921575f5ffd5b5f5f60408385031215613a92575f5ffd5b82356001600160401b03811115613aa7575f5ffd5b613ab385828601613a70565b92505060208301356139f6816138e2565b803563ffffffff81168114612b64575f5ffd5b5f5f60408385031215613ae8575f5ffd5b82359150613af860208401613ac4565b90509250929050565b5f5f5f60408486031215613b13575f5ffd5b83356001600160401b03811115613b28575f5ffd5b613b3486828701613927565b9094509250506020840135613b48816138e2565b809150509250925092565b5f60208284031215613b63575f5ffd5b61168e82613ac4565b5f60208284031215613b7c575f5ffd5b813560ff8116811461168e575f5ffd5b5f60208284031215613b9c575f5ffd5b81356001600160401b03811115613bb1575f5ffd5b61367484828501613a70565b5f5f60408385031215613bce575f5ffd5b8235613bd9816138e2565b946020939093013593505050565b5f5f60408385031215613bf8575f5ffd5b8235613c03816138e2565b915060208301356139f6816138e2565b5f5f5f60408486031215613c25575f5ffd5b8335613c30816138e2565b925060208401356001600160401b038111156139a4575f5ffd5b5f5f60608385031215613c5b575f5ffd5b8235613c66816138e2565b9150613af88460208501613911565b803561ffff81168114612b64575f5ffd5b5f60208284031215613c96575f5ffd5b61168e82613c75565b5f5f60408385031215613cb0575f5ffd5b8235613cbb816138e2565b9150613af860208401613c75565b5f5f5f60608486031215613cdb575f5ffd5b8335613ce6816138e2565b92506020840135613cf6816138e2565b9150613d0460408501613c75565b90509250925092565b5f5f5f5f5f60a08688031215613d21575f5ffd5b8535613d2c816138e2565b9450602086013593506040860135613d43816138e2565b9250613d5160608701613ac4565b9150613d5f60808701613c75565b90509295509295909350565b5f5f5f60808486031215613d7d575f5ffd5b8335613d88816138e2565b9250613d978560208601613911565b9150613d0460608501613c75565b8035613db0816138e2565b6001600160a01b0316825263ffffffff613dcc60208301613ac4565b1660208301525050565b6040810161133d8284613da5565b5f60208284031215613df4575f5ffd5b815161168e816139bd565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613e27575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613e46575f5ffd5b83016020810192503590506001600160401b03811115613e64575f5ffd5b8060061b3603821315613967575f5ffd5b8183526020830192505f815f5b84811015613ed8578135613e95816138e2565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214613ebf575f5ffd5b6020880152506040958601959190910190600101613e82565b5093949350505050565b5f5f8335601e19843603018112613ef7575f5ffd5b83016020810192503590506001600160401b03811115613f15575f5ffd5b803603821315613967575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f613f568283613e31565b60c08552613f6860c086018284613e75565b9150506020830135613f79816138e2565b6001600160a01b03166020850152613f946040840184613e31565b858303604087015280835290915f91906020015b81831015613fe3578335613fbb816138e2565b6001600160a01b03168152602084810135908201526040938401936001939093019201613fa8565b613fef60608701613ac4565b63ffffffff81166060890152935061400960808701613ac4565b63ffffffff81166080890152935061402460a0870187613ee2565b9450925086810360a088015261377d818585613f23565b60018060a01b0384168152826020820152606060408201525f6140616060830184613f4b565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561133d5761133d61406a565b61409b8185613da5565b826040820152608060608201525f6140616080830184613f4b565b8181038181111561133d5761133d61406a565b5f816140d7576140d761406a565b505f190190565b5f8235609e19833603018112613e27575f5ffd5b5f6140fd8283613e31565b60a0855261410f60a086018284613e75565b9150506020830135614120816138e2565b6001600160a01b031660208501526040838101359085015263ffffffff61414960608501613ac4565b16606085015263ffffffff61416060808501613ac4565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f61406160608301846140f2565b602081525f61168e60208301846140f2565b63ffffffff818116838216019081111561133d5761133d61406a565b5f823560fe19833603018112613e27575f5ffd5b828152604060208201525f6136746040830184613f4b565b5f6040828403128015614201575f5ffd5b50604080519081016001600160401b038111828210171561423057634e487b7160e01b5f52604160045260245ffd5b604052823561423e816138e2565b815261424c60208401613ac4565b60208201529392505050565b63ffffffff828116828216039081111561133d5761133d61406a565b5f63ffffffff8216806142895761428961406a565b5f190192915050565b5f602082840312156142a2575f5ffd5b5051919050565b60a081016142b78287613da5565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e198436030181126142f2575f5ffd5b8301803591506001600160401b0382111561430b575f5ffd5b6020019150600681901b3603821315613967575f5ffd5b5f5f8335601e19843603018112614337575f5ffd5b8301803591506001600160401b03821115614350575f5ffd5b6020019150600581901b3603821315613967575f5ffd5b5f5f8335601e1984360301811261437c575f5ffd5b8301803591506001600160401b03821115614395575f5ffd5b602001915036819003821315613967575f5ffd5b80516020808301519190811015613921575f1960209190910360031b1b16919050565b5f602082840312156143dc575f5ffd5b815161168e816138e2565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff831680614410576144106143e7565b8063ffffffff84160691505092915050565b5f82614430576144306143e7565b500490565b5f82518060208501845e5f920191825250919050565b5f82614459576144596143e7565b500690565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea2646970667358221220d27822035ddf1fd469a53d942647ec2995c0193604a2ebbde8b358676c71be5464736f6c634300081e0033", } // RewardsCoordinatorABI is the input ABI used to generate the binding from. @@ -1463,37 +1462,6 @@ func (_RewardsCoordinator *RewardsCoordinatorCallerSession) SubmissionNonce(avs return _RewardsCoordinator.Contract.SubmissionNonce(&_RewardsCoordinator.CallOpts, avs) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinator *RewardsCoordinatorCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _RewardsCoordinator.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinator *RewardsCoordinatorSession) Version() (string, error) { - return _RewardsCoordinator.Contract.Version(&_RewardsCoordinator.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinator *RewardsCoordinatorCallerSession) Version() (string, error) { - return _RewardsCoordinator.Contract.Version(&_RewardsCoordinator.CallOpts) -} - // CreateAVSRewardsSubmission is a paid mutator transaction binding the contract method 0xfce36c7d. // // Solidity: function createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() diff --git a/pkg/bindings/RewardsCoordinatorStorage/binding.go b/pkg/bindings/RewardsCoordinatorStorage/binding.go index d3f3431cd5..dd71c6ef1a 100644 --- a/pkg/bindings/RewardsCoordinatorStorage/binding.go +++ b/pkg/bindings/RewardsCoordinatorStorage/binding.go @@ -99,7 +99,7 @@ type OperatorSet struct { // RewardsCoordinatorStorageMetaData contains all meta data concerning the RewardsCoordinatorStorage contract. var RewardsCoordinatorStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"totalClaimed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedOperatorSetRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionNonce\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"CALCULATION_INTERVAL_SECONDS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"GENESIS_REWARDS_TIMESTAMP\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_FUTURE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_RETROACTIVE_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_REWARDS_DURATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"activationDelay\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"beaconChainETHStrategy\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateEarnerLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"calculateTokenLeafHash\",\"inputs\":[{\"name\":\"leaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"checkClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createAVSRewardsSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedAVSRewardsSubmission\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createOperatorDirectedOperatorSetRewardsSubmission\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"operatorDirectedRewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllEarners\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"createRewardsForAllSubmission\",\"inputs\":[{\"name\":\"rewardsSubmissions\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission[]\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"cumulativeClaimed\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"totalClaimed\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"currRewardsCalculationEndTimestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"defaultOperatorSplitBips\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"delegationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disableRoot\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getCurrentClaimableDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getCurrentDistributionRoot\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootAtIndex\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.DistributionRoot\",\"components\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"disabled\",\"type\":\"bool\",\"internalType\":\"bool\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDistributionRootsLength\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getRootIndexFromHash\",\"inputs\":[{\"name\":\"rootHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_defaultSplitBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedAVSRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isOperatorDirectedOperatorSetRewardsSubmissionHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllEarnersHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isRewardsSubmissionForAllHash\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"valid\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"processClaim\",\"inputs\":[{\"name\":\"claim\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"processClaims\",\"inputs\":[{\"name\":\"claims\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.RewardsMerkleClaim[]\",\"components\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"earnerTreeProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"earnerLeaf\",\"type\":\"tuple\",\"internalType\":\"structIRewardsCoordinatorTypes.EarnerTreeMerkleLeaf\",\"components\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"earnerTokenRoot\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"name\":\"tokenIndices\",\"type\":\"uint32[]\",\"internalType\":\"uint32[]\"},{\"name\":\"tokenTreeProofs\",\"type\":\"bytes[]\",\"internalType\":\"bytes[]\"},{\"name\":\"tokenLeaves\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.TokenTreeMerkleLeaf[]\",\"components\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"cumulativeEarnings\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]}]},{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"rewardsUpdater\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setActivationDelay\",\"inputs\":[{\"name\":\"_activationDelay\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setClaimerFor\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setDefaultOperatorSplit\",\"inputs\":[{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorAVSSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorPISplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorSetSplit\",\"inputs\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"split\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsForAllSubmitter\",\"inputs\":[{\"name\":\"_submitter\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_newValue\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setRewardsUpdater\",\"inputs\":[{\"name\":\"_rewardsUpdater\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submissionNonce\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"submitRoot\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"AVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ActivationDelaySet\",\"inputs\":[{\"name\":\"oldActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"newActivationDelay\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ClaimerForSet\",\"inputs\":[{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldClaimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DefaultOperatorSplitBipsSet\",\"inputs\":[{\"name\":\"oldDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newDefaultOperatorSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootDisabled\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DistributionRootSubmitted\",\"inputs\":[{\"name\":\"rootIndex\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsCalculationEndTimestamp\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorAVSSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorAVSSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedAVSRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorDirectedOperatorSetRewardsSubmissionCreated\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorDirectedRewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"operatorDirectedRewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"operatorRewards\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.OperatorReward[]\",\"components\":[{\"name\":\"operator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"description\",\"type\":\"string\",\"internalType\":\"string\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorPISplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorPISplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OperatorSetSplitBipsSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"activatedAt\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"oldOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"},{\"name\":\"newOperatorSetSplitBips\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsClaimed\",\"inputs\":[{\"name\":\"root\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"},{\"name\":\"earner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"claimer\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"recipient\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"claimedAmount\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsForAllSubmitterSet\",\"inputs\":[{\"name\":\"rewardsForAllSubmitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"oldValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"},{\"name\":\"newValue\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllCreated\",\"inputs\":[{\"name\":\"submitter\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsSubmissionForAllEarnersCreated\",\"inputs\":[{\"name\":\"tokenHopper\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"submissionNonce\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"rewardsSubmissionHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewardsSubmission\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structIRewardsCoordinatorTypes.RewardsSubmission\",\"components\":[{\"name\":\"strategiesAndMultipliers\",\"type\":\"tuple[]\",\"internalType\":\"structIRewardsCoordinatorTypes.StrategyAndMultiplier[]\",\"components\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"multiplier\",\"type\":\"uint96\",\"internalType\":\"uint96\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"startTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"duration\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"RewardsUpdaterSet\",\"inputs\":[{\"name\":\"oldRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newRewardsUpdater\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AmountExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"AmountIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"DurationIsZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EarningsNotGreaterThanClaimed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthMismatch\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputArrayLengthZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCalculationIntervalSecondsRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidClaimProof\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidDurationRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidEarnerLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidGenesisRewardsTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRoot\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidRootIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidStartTimestampRemainder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTokenLeafIndex\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewRootMustBeForNewCalculatedPeriod\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OperatorsNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PreviousSplitPending\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RewardsEndTimestampNotElapsed\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootAlreadyActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootDisabled\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"RootNotActivated\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SplitExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInFuture\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StartTimestampTooFarInPast\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategiesNotInAscendingOrder\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SubmissionNotRetroactive\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedCaller\",\"inputs\":[]}]", } // RewardsCoordinatorStorageABI is the input ABI used to generate the binding from. @@ -1271,37 +1271,6 @@ func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Submis return _RewardsCoordinatorStorage.Contract.SubmissionNonce(&_RewardsCoordinatorStorage.CallOpts, avs) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _RewardsCoordinatorStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageSession) Version() (string, error) { - return _RewardsCoordinatorStorage.Contract.Version(&_RewardsCoordinatorStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_RewardsCoordinatorStorage *RewardsCoordinatorStorageCallerSession) Version() (string, error) { - return _RewardsCoordinatorStorage.Contract.Version(&_RewardsCoordinatorStorage.CallOpts) -} - // CreateAVSRewardsSubmission is a paid mutator transaction binding the contract method 0xfce36c7d. // // Solidity: function createAVSRewardsSubmission(((address,uint96)[],address,uint256,uint32,uint32)[] rewardsSubmissions) returns() diff --git a/pkg/bindings/SlashingLib/binding.go b/pkg/bindings/SlashingLib/binding.go index b801b69c40..6ecea90664 100644 --- a/pkg/bindings/SlashingLib/binding.go +++ b/pkg/bindings/SlashingLib/binding.go @@ -32,7 +32,7 @@ var ( // SlashingLibMetaData contains all meta data concerning the SlashingLib contract. var SlashingLibMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"InvalidDepositScalingFactor\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220f72f70aa8e98e23dccc085223312b847e8da4498d9bcea40a5f6461473b053e664736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea26469706673582212205d60ae665204d3c9f6165c798df312de65baa13e163c9b38dc9c83049ed267dc64736f6c634300081e0033", } // SlashingLibABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/Snapshots/binding.go b/pkg/bindings/Snapshots/binding.go index 0157c0eb33..e0c867e596 100644 --- a/pkg/bindings/Snapshots/binding.go +++ b/pkg/bindings/Snapshots/binding.go @@ -32,7 +32,7 @@ var ( // SnapshotsMetaData contains all meta data concerning the Snapshots contract. var SnapshotsMetaData = &bind.MetaData{ ABI: "[{\"type\":\"error\",\"name\":\"InvalidSnapshotOrdering\",\"inputs\":[]}]", - Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220934dbea011a7b5c1af5e2494d9913302461af4e355aef9fdb16d2f4d46ac097964736f6c634300081b0033", + Bin: "0x60556032600b8282823980515f1a607314602657634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe730000000000000000000000000000000000000000301460806040525f5ffdfea2646970667358221220732ebdb9ea984b4b0e07bad7dd898517c055524962904f8fc1155d1a5442e0b664736f6c634300081e0033", } // SnapshotsABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/SplitContractMixin/binding.go b/pkg/bindings/SplitContractMixin/binding.go new file mode 100644 index 0000000000..1e68d95bcc --- /dev/null +++ b/pkg/bindings/SplitContractMixin/binding.go @@ -0,0 +1,212 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package SplitContractMixin + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// SplitContractMixinMetaData contains all meta data concerning the SplitContractMixin contract. +var SplitContractMixinMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"function\",\"name\":\"viewImplementation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"}]", +} + +// SplitContractMixinABI is the input ABI used to generate the binding from. +// Deprecated: Use SplitContractMixinMetaData.ABI instead. +var SplitContractMixinABI = SplitContractMixinMetaData.ABI + +// SplitContractMixin is an auto generated Go binding around an Ethereum contract. +type SplitContractMixin struct { + SplitContractMixinCaller // Read-only binding to the contract + SplitContractMixinTransactor // Write-only binding to the contract + SplitContractMixinFilterer // Log filterer for contract events +} + +// SplitContractMixinCaller is an auto generated read-only Go binding around an Ethereum contract. +type SplitContractMixinCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SplitContractMixinTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SplitContractMixinTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SplitContractMixinFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SplitContractMixinFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SplitContractMixinSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SplitContractMixinSession struct { + Contract *SplitContractMixin // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SplitContractMixinCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SplitContractMixinCallerSession struct { + Contract *SplitContractMixinCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SplitContractMixinTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SplitContractMixinTransactorSession struct { + Contract *SplitContractMixinTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SplitContractMixinRaw is an auto generated low-level Go binding around an Ethereum contract. +type SplitContractMixinRaw struct { + Contract *SplitContractMixin // Generic contract binding to access the raw methods on +} + +// SplitContractMixinCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SplitContractMixinCallerRaw struct { + Contract *SplitContractMixinCaller // Generic read-only contract binding to access the raw methods on +} + +// SplitContractMixinTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SplitContractMixinTransactorRaw struct { + Contract *SplitContractMixinTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSplitContractMixin creates a new instance of SplitContractMixin, bound to a specific deployed contract. +func NewSplitContractMixin(address common.Address, backend bind.ContractBackend) (*SplitContractMixin, error) { + contract, err := bindSplitContractMixin(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SplitContractMixin{SplitContractMixinCaller: SplitContractMixinCaller{contract: contract}, SplitContractMixinTransactor: SplitContractMixinTransactor{contract: contract}, SplitContractMixinFilterer: SplitContractMixinFilterer{contract: contract}}, nil +} + +// NewSplitContractMixinCaller creates a new read-only instance of SplitContractMixin, bound to a specific deployed contract. +func NewSplitContractMixinCaller(address common.Address, caller bind.ContractCaller) (*SplitContractMixinCaller, error) { + contract, err := bindSplitContractMixin(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SplitContractMixinCaller{contract: contract}, nil +} + +// NewSplitContractMixinTransactor creates a new write-only instance of SplitContractMixin, bound to a specific deployed contract. +func NewSplitContractMixinTransactor(address common.Address, transactor bind.ContractTransactor) (*SplitContractMixinTransactor, error) { + contract, err := bindSplitContractMixin(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SplitContractMixinTransactor{contract: contract}, nil +} + +// NewSplitContractMixinFilterer creates a new log filterer instance of SplitContractMixin, bound to a specific deployed contract. +func NewSplitContractMixinFilterer(address common.Address, filterer bind.ContractFilterer) (*SplitContractMixinFilterer, error) { + contract, err := bindSplitContractMixin(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SplitContractMixinFilterer{contract: contract}, nil +} + +// bindSplitContractMixin binds a generic wrapper to an already deployed contract. +func bindSplitContractMixin(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SplitContractMixinMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SplitContractMixin *SplitContractMixinRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SplitContractMixin.Contract.SplitContractMixinCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SplitContractMixin *SplitContractMixinRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SplitContractMixin.Contract.SplitContractMixinTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SplitContractMixin *SplitContractMixinRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SplitContractMixin.Contract.SplitContractMixinTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SplitContractMixin *SplitContractMixinCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SplitContractMixin.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SplitContractMixin *SplitContractMixinTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SplitContractMixin.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SplitContractMixin *SplitContractMixinTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SplitContractMixin.Contract.contract.Transact(opts, method, params...) +} + +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. +// +// Solidity: function viewImplementation() view returns(address) +func (_SplitContractMixin *SplitContractMixinCaller) ViewImplementation(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SplitContractMixin.contract.Call(opts, &out, "viewImplementation") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. +// +// Solidity: function viewImplementation() view returns(address) +func (_SplitContractMixin *SplitContractMixinSession) ViewImplementation() (common.Address, error) { + return _SplitContractMixin.Contract.ViewImplementation(&_SplitContractMixin.CallOpts) +} + +// ViewImplementation is a free data retrieval call binding the contract method 0x0b156bb6. +// +// Solidity: function viewImplementation() view returns(address) +func (_SplitContractMixin *SplitContractMixinCallerSession) ViewImplementation() (common.Address, error) { + return _SplitContractMixin.Contract.ViewImplementation(&_SplitContractMixin.CallOpts) +} diff --git a/pkg/bindings/StrategyBase/binding.go b/pkg/bindings/StrategyBase/binding.go index 6d4b6016eb..248de1b4df 100644 --- a/pkg/bindings/StrategyBase/binding.go +++ b/pkg/bindings/StrategyBase/binding.go @@ -31,8 +31,8 @@ var ( // StrategyBaseMetaData contains all meta data concerning the StrategyBase contract. var StrategyBaseMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161152938038061152983398101604081905261002e916101b6565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102e7565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028c565b60405180910390fd5b80516100cb826102c1565b179392505050565b5f54610100900460ff161561013a5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b5f5460ff90811614610189575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461019f575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101c8575f5ffd5b83516101d38161018b565b60208501519093506101e48161018b565b60408501519092506001600160401b038111156101ff575f5ffd5b8401601f8101861361020f575f5ffd5b80516001600160401b03811115610228576102286101a2565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610256576102566101a2565b60405281815282820160200188101561026d575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e1575f198160200360031b1b821691505b50919050565b60805160a05160c0516111f56103345f395f81816101800152818161035d01528181610686015261070801525f61047d01525f818161024b015281816108b60152610c6c01526111f55ff3fe608060405234801561000f575f5ffd5b5060043610610132575f3560e01c80637a8b2637116100b4578063c4d66de811610079578063c4d66de81461029b578063ce7c2ac2146102ae578063d9caed12146102c1578063e3dae51c146102d4578063f3e73875146102e7578063fabc1cbc146102fa575f5ffd5b80637a8b263714610233578063886f1195146102465780638c8710191461026d5780638f6a624014610280578063ab5921e114610293575f5ffd5b806354fd4d50116100fa57806354fd4d50146101cc578063553ca5f8146101e1578063595c6a67146101f45780635ac86ab7146101fc5780635c975abb1461022b575f5ffd5b8063136439dd146101365780632495a5991461014b57806339b70e381461017b5780633a98ef39146101a257806347e7ef24146101b9575b5f5ffd5b610149610144366004610f6d565b61030d565b005b60325461015e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab60335481565b604051908152602001610172565b6101ab6101c7366004610f98565b610347565b6101d4610476565b6040516101729190610fc2565b6101ab6101ef366004610ff7565b6104a6565b6101496104b9565b61021b61020a366004611027565b6001805460ff9092161b9081161490565b6040519015158152602001610172565b6001546101ab565b6101ab610241366004610f6d565b6104cd565b61015e7f000000000000000000000000000000000000000000000000000000000000000081565b6101ab61027b366004610f6d565b610516565b6101ab61028e366004610ff7565b610520565b6101d461052d565b6101496102a9366004610ff7565b61054d565b6101ab6102bc366004610ff7565b61065f565b6101ab6102cf366004611042565b6106f1565b6101ab6102e2366004610f6d565b6107f3565b6101ab6102f5366004610f6d565b61082a565b610149610308366004610f6d565b610834565b6103156108a1565b600154818116811461033a5760405163c61dca5d60e01b815260040160405180910390fd5b61034382610944565b5050565b5f5f61035281610981565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461039b576040516348da714f60e01b815260040160405180910390fd5b6103a584846109b7565b6033545f6103b56103e883611094565b90505f6103e86103c36109e5565b6103cd9190611094565b90505f6103da87836110a7565b9050806103e784896110ba565b6103f191906110d1565b9550855f0361041357604051630c392ed360e11b815260040160405180910390fd5b61041d8685611094565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561045257604051632f14e8a360e11b815260040160405180910390fd5b61046b826103e86033546104669190611094565b610a4f565b505050505092915050565b60606104a17f0000000000000000000000000000000000000000000000000000000000000000610a9b565b905090565b5f6104b36102418361065f565b92915050565b6104c16108a1565b6104cb5f19610944565b565b5f5f6103e86033546104df9190611094565b90505f6103e86104ed6109e5565b6104f79190611094565b90508161050485836110ba565b61050e91906110d1565b949350505050565b5f6104b3826107f3565b5f6104b36102f58361065f565b60606040518060800160405280604d8152602001611173604d9139905090565b5f54610100900460ff161580801561056b57505f54600160ff909116105b806105845750303b15801561058457505f5460ff166001145b6105ec5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561060d575f805461ff0019166101001790555b61061682610ad8565b8015610343575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156106cd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104b391906110f0565b5f60016106fd81610981565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610746576040516348da714f60e01b815260040160405180910390fd5b610751858585610c23565b6033548084111561077557604051630b469df360e41b815260040160405180910390fd5b5f6107826103e883611094565b90505f6103e86107906109e5565b61079a9190611094565b9050816107a787836110ba565b6107b191906110d1565b94506107bd86846110a7565b6033556107dd6107cd86836110a7565b6103e86033546104669190611094565b6107e8888887610c56565b505050509392505050565b5f5f6103e86033546108059190611094565b90505f6103e86108136109e5565b61081d9190611094565b90508061050483866110ba565b5f6104b3826104cd565b61083c610c6a565b600154801982198116146108635760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610903573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109279190611107565b6104cb57604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610996816001805460ff9092161b9081161490565b156109b45760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161461034357604051630312abdd60e61b815260040160405180910390fd5b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610a2b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104a191906110f0565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610a8384670de0b6b3a76400006110ba565b610a8d91906110d1565b604051908152602001610653565b60605f610aa783610d1b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610b425760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105e3565b603280546001600160a01b0319166001600160a01b038316179055610b665f610944565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bd8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bfc9190611126565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610c5157604051630312abdd60e61b815260040160405180910390fd5b505050565b610c516001600160a01b0383168483610d42565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cc6573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cea9190611141565b6001600160a01b0316336001600160a01b0316146104cb5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156104b357604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610c51928692915f91610dd1918516908490610e50565b905080515f1480610df1575080806020019051810190610df19190611107565b610c515760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105e3565b606061050e84845f85855f5f866001600160a01b03168587604051610e75919061115c565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5091509150610ec587838387610ed0565b979650505050505050565b60608315610f3e5782515f03610f37576001600160a01b0385163b610f375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105e3565b508161050e565b61050e8383815115610f535781518083602001fd5b8060405162461bcd60e51b81526004016105e39190610fc2565b5f60208284031215610f7d575f5ffd5b5035919050565b6001600160a01b03811681146109b4575f5ffd5b5f5f60408385031215610fa9575f5ffd5b8235610fb481610f84565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611007575f5ffd5b813561101281610f84565b9392505050565b60ff811681146109b4575f5ffd5b5f60208284031215611037575f5ffd5b813561101281611019565b5f5f5f60608486031215611054575f5ffd5b833561105f81610f84565b9250602084013561106f81610f84565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156104b3576104b3611080565b818103818111156104b3576104b3611080565b80820281158282048414176104b3576104b3611080565b5f826110eb57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215611100575f5ffd5b5051919050565b5f60208284031215611117575f5ffd5b81518015158114611012575f5ffd5b5f60208284031215611136575f5ffd5b815161101281611019565b5f60208284031215611151575f5ffd5b815161101281610f84565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220df3168aa618b503f49bfdd657dd79d216edd2d18d519b2d5bf302619d0cab6c264736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60c060405234801561000f575f5ffd5b5060405161131a38038061131a83398101604081905261002e9161014b565b806001600160a01b038116610056576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03908116608052821660a052610071610078565b5050610183565b5f54610100900460ff16156100e35760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610132575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b0381168114610148575f5ffd5b50565b5f5f6040838503121561015c575f5ffd5b825161016781610134565b602084015190925061017881610134565b809150509250929050565b60805160a0516111536101c75f395f81816101750152818161034a0152818161064301526106c501525f818161022b015281816108730152610bf101526111535ff3fe608060405234801561000f575f5ffd5b5060043610610127575f3560e01c8063886f1195116100a9578063ce7c2ac21161006e578063ce7c2ac21461029b578063d9caed12146102ae578063e3dae51c146102c1578063f3e73875146102d4578063fabc1cbc146102e7575f5ffd5b8063886f1195146102265780638c8710191461024d5780638f6a624014610260578063ab5921e114610273578063c4d66de814610288575f5ffd5b8063553ca5f8116100ef578063553ca5f8146101c1578063595c6a67146101d45780635ac86ab7146101dc5780635c975abb1461020b5780637a8b263714610213575f5ffd5b8063136439dd1461012b5780632495a5991461014057806339b70e38146101705780633a98ef391461019757806347e7ef24146101ae575b5f5ffd5b61013e610139366004610ecb565b6102fa565b005b603254610153906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6101a060335481565b604051908152602001610167565b6101a06101bc366004610ef6565b610334565b6101a06101cf366004610f20565b610463565b61013e610476565b6101fb6101ea366004610f50565b6001805460ff9092161b9081161490565b6040519015158152602001610167565b6001546101a0565b6101a0610221366004610ecb565b61048a565b6101537f000000000000000000000000000000000000000000000000000000000000000081565b6101a061025b366004610ecb565b6104d3565b6101a061026e366004610f20565b6104dd565b61027b6104ea565b6040516101679190610f6b565b61013e610296366004610f20565b61050a565b6101a06102a9366004610f20565b61061c565b6101a06102bc366004610fa0565b6106ae565b6101a06102cf366004610ecb565b6107b0565b6101a06102e2366004610ecb565b6107e7565b61013e6102f5366004610ecb565b6107f1565b61030261085e565b60015481811681146103275760405163c61dca5d60e01b815260040160405180910390fd5b61033082610901565b5050565b5f5f61033f8161093e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610388576040516348da714f60e01b815260040160405180910390fd5b6103928484610974565b6033545f6103a26103e883610ff2565b90505f6103e86103b06109a2565b6103ba9190610ff2565b90505f6103c78783611005565b9050806103d48489611018565b6103de919061102f565b9550855f0361040057604051630c392ed360e11b815260040160405180910390fd5b61040a8685610ff2565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561043f57604051632f14e8a360e11b815260040160405180910390fd5b610458826103e86033546104539190610ff2565b610a11565b505050505092915050565b5f6104706102218361061c565b92915050565b61047e61085e565b6104885f19610901565b565b5f5f6103e860335461049c9190610ff2565b90505f6103e86104aa6109a2565b6104b49190610ff2565b9050816104c18583611018565b6104cb919061102f565b949350505050565b5f610470826107b0565b5f6104706102e28361061c565b60606040518060800160405280604d81526020016110d1604d9139905090565b5f54610100900460ff161580801561052857505f54600160ff909116105b806105415750303b15801561054157505f5460ff166001145b6105a95760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156105ca575f805461ff0019166101001790555b6105d382610a5d565b8015610330575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa15801561068a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610470919061104e565b5f60016106ba8161093e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610703576040516348da714f60e01b815260040160405180910390fd5b61070e858585610ba8565b6033548084111561073257604051630b469df360e41b815260040160405180910390fd5b5f61073f6103e883610ff2565b90505f6103e861074d6109a2565b6107579190610ff2565b9050816107648783611018565b61076e919061102f565b945061077a8684611005565b60335561079a61078a8683611005565b6103e86033546104539190610ff2565b6107a5888887610bdb565b505050509392505050565b5f5f6103e86033546107c29190610ff2565b90505f6103e86107d06109a2565b6107da9190610ff2565b9050806104c18386611018565b5f6104708261048a565b6107f9610bef565b600154801982198116146108205760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156108c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e49190611065565b61048857604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610953816001805460ff9092161b9081161490565b156109715760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161461033057604051630312abdd60e61b815260040160405180910390fd5b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa1580156109e8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0c919061104e565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610a4584670de0b6b3a7640000611018565b610a4f919061102f565b604051908152602001610610565b5f54610100900460ff16610ac75760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105a0565b603280546001600160a01b0319166001600160a01b038316179055610aeb5f610901565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b819190611084565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610bd657604051630312abdd60e61b815260040160405180910390fd5b505050565b610bd66001600160a01b0383168483610ca0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c4b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c6f919061109f565b6001600160a01b0316336001600160a01b0316146104885760405163794821ff60e01b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610bd6928692915f91610d2f918516908490610dae565b905080515f1480610d4f575080806020019051810190610d4f9190611065565b610bd65760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105a0565b60606104cb84845f85855f5f866001600160a01b03168587604051610dd391906110ba565b5f6040518083038185875af1925050503d805f8114610e0d576040519150601f19603f3d011682016040523d82523d5f602084013e610e12565b606091505b5091509150610e2387838387610e2e565b979650505050505050565b60608315610e9c5782515f03610e95576001600160a01b0385163b610e955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105a0565b50816104cb565b6104cb8383815115610eb15781518083602001fd5b8060405162461bcd60e51b81526004016105a09190610f6b565b5f60208284031215610edb575f5ffd5b5035919050565b6001600160a01b0381168114610971575f5ffd5b5f5f60408385031215610f07575f5ffd5b8235610f1281610ee2565b946020939093013593505050565b5f60208284031215610f30575f5ffd5b8135610f3b81610ee2565b9392505050565b60ff81168114610971575f5ffd5b5f60208284031215610f60575f5ffd5b8135610f3b81610f42565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f60608486031215610fb2575f5ffd5b8335610fbd81610ee2565b92506020840135610fcd81610ee2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561047057610470610fde565b8181038181111561047057610470610fde565b808202811582820484141761047057610470610fde565b5f8261104957634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561105e575f5ffd5b5051919050565b5f60208284031215611075575f5ffd5b81518015158114610f3b575f5ffd5b5f60208284031215611094575f5ffd5b8151610f3b81610f42565b5f602082840312156110af575f5ffd5b8151610f3b81610ee2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220f59ebf5750243b032f2595e2fdc9e231c645474f438160a7e73ce584f44c9b1364736f6c634300081e0033", } // StrategyBaseABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var StrategyBaseABI = StrategyBaseMetaData.ABI var StrategyBaseBin = StrategyBaseMetaData.Bin // DeployStrategyBase deploys a new Ethereum contract, binding an instance of StrategyBase to it. -func DeployStrategyBase(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *StrategyBase, error) { +func DeployStrategyBase(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *StrategyBase, error) { parsed, err := StrategyBaseMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStrategyBase(auth *bind.TransactOpts, backend bind.ContractBackend, _ return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyBaseBin), backend, _strategyManager, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyBaseBin), backend, _strategyManager, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -605,37 +605,6 @@ func (_StrategyBase *StrategyBaseCallerSession) UserUnderlyingView(user common.A return _StrategyBase.Contract.UserUnderlyingView(&_StrategyBase.CallOpts, user) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBase *StrategyBaseCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StrategyBase.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBase *StrategyBaseSession) Version() (string, error) { - return _StrategyBase.Contract.Version(&_StrategyBase.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBase *StrategyBaseCallerSession) Version() (string, error) { - return _StrategyBase.Contract.Version(&_StrategyBase.CallOpts) -} - // Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. // // Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) diff --git a/pkg/bindings/StrategyBaseTVLLimits/binding.go b/pkg/bindings/StrategyBaseTVLLimits/binding.go index 4bd64535ea..93f351fbdb 100644 --- a/pkg/bindings/StrategyBaseTVLLimits/binding.go +++ b/pkg/bindings/StrategyBaseTVLLimits/binding.go @@ -31,8 +31,8 @@ var ( // StrategyBaseTVLLimitsMetaData contains all meta data concerning the StrategyBaseTVLLimits contract. var StrategyBaseTVLLimitsMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTVLLimits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_maxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_maxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxPerDeposit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxTotalDeposits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setTVLLimits\",\"inputs\":[{\"name\":\"newMaxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newMaxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxPerDepositUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxTotalDepositsUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", - Bin: "0x60e060405234801561000f575f5ffd5b5060405161181738038061181783398101604081905261002e916101bc565b82828280826001600160a01b03811661005a576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006f81610093565b60a052506001600160a01b03831660c0526100886100d9565b5050505050506102ed565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd9190610292565b60405180910390fd5b80516100d1826102c7565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101ce575f5ffd5b83516101d981610191565b60208501519093506101ea81610191565b60408501519092506001600160401b03811115610205575f5ffd5b8401601f81018613610215575f5ffd5b80516001600160401b0381111561022e5761022e6101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025c5761025c6101a8565b604052818152828201602001881015610273575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e7575f198160200360031b1b821691505b50919050565b60805160a05160c0516114dd61033a5f395f81816101e801528181610417015281816107cf015261085101525f61053701525f81816102c5015281816109ec0152610b5401526114dd5ff3fe608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000000000000000000000000000000000000000000081565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f0000000000000000000000000000000000000000000000000000000000000000610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220b558327578c1929fb73bd404f32b72dd0129feaf61c7fcbe12bfa239d47edc6c64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deposit\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"newShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"explanation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTVLLimits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_maxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_maxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_underlyingToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"maxPerDeposit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maxTotalDeposits\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setTVLLimits\",\"inputs\":[{\"name\":\"newMaxPerDeposit\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"newMaxTotalDeposits\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"shares\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlying\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sharesToUnderlyingView\",\"inputs\":[{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"totalShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToShares\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToSharesView\",\"inputs\":[{\"name\":\"amountUnderlying\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"underlyingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlying\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"userUnderlyingView\",\"inputs\":[{\"name\":\"user\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdraw\",\"inputs\":[{\"name\":\"recipient\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amountShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"amountOut\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExchangeRateEmitted\",\"inputs\":[{\"name\":\"rate\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxPerDepositUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"MaxTotalDepositsUpdated\",\"inputs\":[{\"name\":\"previousValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"newValue\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyTokenSet\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"decimals\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"BalanceExceedsMaxTotalDeposits\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxPerDepositExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"NewSharesZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnderlyingToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TotalSharesExceedsMax\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"WithdrawalAmountExceedsTotalDeposits\",\"inputs\":[]}]", + Bin: "0x60c060405234801561000f575f5ffd5b506040516115f73803806115f783398101604081905261002e9161014f565b8181806001600160a01b038116610058576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03908116608052821660a05261007361007c565b50505050610187565b5f54610100900460ff16156100e75760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610136575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461014c575f5ffd5b50565b5f5f60408385031215610160575f5ffd5b825161016b81610138565b602084015190925061017c81610138565b809150509250929050565b60805160a05161142c6101cb5f395f81816101ce015281816103f50152818161077d01526107ff01525f81816102960152818161099a0152610b02015261142c5ff3fe608060405234801561000f575f5ffd5b506004361061016d575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc11461033f578063e3dae51c1461035a578063f3e738751461036d578063fabc1cbc14610380575f5ffd5b8063c4d66de814610306578063ce7c2ac214610319578063d9caed121461032c575f5ffd5b80637a8b26371461027e578063886f1195146102915780638c871019146102b85780638f6a6240146102cb578063a6ab36f2146102de578063ab5921e1146102f1575f5ffd5b806347e7ef241161012a57806347e7ef2414610210578063553ca5f814610223578063595c6a67146102365780635ac86ab71461023e5780635c975abb1461026d57806361b01b5d14610275575f5ffd5b806311c70c9d14610171578063136439dd146101865780632495a5991461019957806339b70e38146101c95780633a98ef39146101f057806343fe08b014610207575b5f5ffd5b61018461017f366004611100565b610393565b005b610184610194366004611120565b6103a9565b6032546101ac906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b6101f960335481565b6040519081526020016101c0565b6101f960645481565b6101f961021e36600461114b565b6103df565b6101f9610231366004611175565b61050e565b610184610521565b61025d61024c3660046111a5565b6001805460ff9092161b9081161490565b60405190151581526020016101c0565b6001546101f9565b6101f960655481565b6101f961028c366004611120565b610535565b6101ac7f000000000000000000000000000000000000000000000000000000000000000081565b6101f96102c6366004611120565b61057e565b6101f96102d9366004611175565b610588565b6101846102ec3660046111c0565b610595565b6102f9610670565b6040516101c091906111f6565b610184610314366004611175565b610690565b6101f9610327366004611175565b610756565b6101f961033a36600461122b565b6107e8565b606454606554604080519283526020830191909152016101c0565b6101f9610368366004611120565b6108ea565b6101f961037b366004611120565b610921565b61018461038e366004611120565b61092b565b61039b610998565b6103a58282610a49565b5050565b6103b1610aed565b60015481811681146103d65760405163c61dca5d60e01b815260040160405180910390fd5b6103a582610b90565b5f5f6103ea81610bcd565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610433576040516348da714f60e01b815260040160405180910390fd5b61043d8484610c03565b6033545f61044d6103e88361127d565b90505f6103e861045b610c5a565b610465919061127d565b90505f6104728783611290565b90508061047f84896112a3565b61048991906112ba565b9550855f036104ab57604051630c392ed360e11b815260040160405180910390fd5b6104b5868561127d565b60338190556f4b3b4ca85a86c47a098a223fffffffff10156104ea57604051632f14e8a360e11b815260040160405180910390fd5b610503826103e86033546104fe919061127d565b610cc9565b505050505092915050565b5f61051b61028c83610756565b92915050565b610529610aed565b6105335f19610b90565b565b5f5f6103e8603354610547919061127d565b90505f6103e8610555610c5a565b61055f919061127d565b90508161056c85836112a3565b61057691906112ba565b949350505050565b5f61051b826108ea565b5f61051b61037b83610756565b5f54610100900460ff16158080156105b357505f54600160ff909116105b806105cc5750303b1580156105cc57505f5460ff166001145b6105f15760405162461bcd60e51b81526004016105e8906112d9565b60405180910390fd5b5f805460ff191660011790558015610612575f805461ff0019166101001790555b61061c8484610a49565b61062582610d15565b801561066a575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d81526020016113aa604d9139905090565b5f54610100900460ff16158080156106ae57505f54600160ff909116105b806106c75750303b1580156106c757505f5460ff166001145b6106e35760405162461bcd60e51b81526004016105e8906112d9565b5f805460ff191660011790558015610704575f805461ff0019166101001790555b61070d82610d15565b80156103a5575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f00000000000000000000000000000000000000000000000000000000000000009091169063fe243a1790604401602060405180830381865afa1580156107c4573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061051b9190611327565b5f60016107f481610bcd565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461083d576040516348da714f60e01b815260040160405180910390fd5b610848858585610e60565b6033548084111561086c57604051630b469df360e41b815260040160405180910390fd5b5f6108796103e88361127d565b90505f6103e8610887610c5a565b610891919061127d565b90508161089e87836112a3565b6108a891906112ba565b94506108b48684611290565b6033556108d46108c48683611290565b6103e86033546104fe919061127d565b6108df888887610e93565b505050509392505050565b5f5f6103e86033546108fc919061127d565b90505f6103e861090a610c5a565b610914919061127d565b90508061056c83866112a3565b5f61051b82610535565b610933610998565b6001548019821981161461095a5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109f4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a18919061133e565b6001600160a01b0316336001600160a01b0316146105335760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610ae25760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b4f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b739190611359565b61053357604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610be2816001805460ff9092161b9081161490565b15610c005760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c265760405163052b07b760e21b815260040160405180910390fd5b606554610c31610c5a565b1115610c505760405163d86bae6760e01b815260040160405180910390fd5b6103a58282610ea7565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610ca0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cc49190611327565b905090565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610cfd84670de0b6b3a76400006112a3565b610d0791906112ba565b60405190815260200161074a565b5f54610100900460ff16610d7f5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016105e8565b603280546001600160a01b0319166001600160a01b038316179055610da35f610b90565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e15573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e399190611378565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610e8e57604051630312abdd60e61b815260040160405180910390fd5b505050565b610e8e6001600160a01b0383168483610ed5565b6032546001600160a01b038381169116146103a557604051630312abdd60e61b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610e8e928692915f91610f64918516908490610fe3565b905080515f1480610f84575080806020019051810190610f849190611359565b610e8e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016105e8565b606061057684845f85855f5f866001600160a01b031685876040516110089190611393565b5f6040518083038185875af1925050503d805f8114611042576040519150601f19603f3d011682016040523d82523d5f602084013e611047565b606091505b509150915061105887838387611063565b979650505050505050565b606083156110d15782515f036110ca576001600160a01b0385163b6110ca5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016105e8565b5081610576565b61057683838151156110e65781518083602001fd5b8060405162461bcd60e51b81526004016105e891906111f6565b5f5f60408385031215611111575f5ffd5b50508035926020909101359150565b5f60208284031215611130575f5ffd5b5035919050565b6001600160a01b0381168114610c00575f5ffd5b5f5f6040838503121561115c575f5ffd5b823561116781611137565b946020939093013593505050565b5f60208284031215611185575f5ffd5b813561119081611137565b9392505050565b60ff81168114610c00575f5ffd5b5f602082840312156111b5575f5ffd5b813561119081611197565b5f5f5f606084860312156111d2575f5ffd5b833592506020840135915060408401356111eb81611137565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f6060848603121561123d575f5ffd5b833561124881611137565b9250602084013561125881611137565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561051b5761051b611269565b8181038181111561051b5761051b611269565b808202811582820484141761051b5761051b611269565b5f826112d457634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f60208284031215611337575f5ffd5b5051919050565b5f6020828403121561134e575f5ffd5b815161119081611137565b5f60208284031215611369575f5ffd5b81518015158114611190575f5ffd5b5f60208284031215611388575f5ffd5b815161119081611197565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212204bceb7d2d7b1fc606710564317cd99f1b7efc3ef07c2c238ba767d013f12ba7564736f6c634300081e0033", } // StrategyBaseTVLLimitsABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var StrategyBaseTVLLimitsABI = StrategyBaseTVLLimitsMetaData.ABI var StrategyBaseTVLLimitsBin = StrategyBaseTVLLimitsMetaData.Bin // DeployStrategyBaseTVLLimits deploys a new Ethereum contract, binding an instance of StrategyBaseTVLLimits to it. -func DeployStrategyBaseTVLLimits(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *StrategyBaseTVLLimits, error) { +func DeployStrategyBaseTVLLimits(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *StrategyBaseTVLLimits, error) { parsed, err := StrategyBaseTVLLimitsMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStrategyBaseTVLLimits(auth *bind.TransactOpts, backend bind.ContractB return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyBaseTVLLimitsBin), backend, _strategyManager, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyBaseTVLLimitsBin), backend, _strategyManager, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -699,37 +699,6 @@ func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) UserUnderlying return _StrategyBaseTVLLimits.Contract.UserUnderlyingView(&_StrategyBaseTVLLimits.CallOpts, user) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StrategyBaseTVLLimits.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsSession) Version() (string, error) { - return _StrategyBaseTVLLimits.Contract.Version(&_StrategyBaseTVLLimits.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyBaseTVLLimits *StrategyBaseTVLLimitsCallerSession) Version() (string, error) { - return _StrategyBaseTVLLimits.Contract.Version(&_StrategyBaseTVLLimits.CallOpts) -} - // Deposit is a paid mutator transaction binding the contract method 0x47e7ef24. // // Solidity: function deposit(address token, uint256 amount) returns(uint256 newShares) diff --git a/pkg/bindings/StrategyFactory/binding.go b/pkg/bindings/StrategyFactory/binding.go index a0a03d4008..2f0ab252e4 100644 --- a/pkg/bindings/StrategyFactory/binding.go +++ b/pkg/bindings/StrategyFactory/binding.go @@ -31,8 +31,8 @@ var ( // StrategyFactoryMetaData contains all meta data concerning the StrategyFactory contract. var StrategyFactoryMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"blacklistTokens\",\"inputs\":[{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategyBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isBlacklisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x60e060405234801561000f575f5ffd5b50604051611b26380380611b2683398101604081905261002e916101b9565b80826001600160a01b038116610057576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b031660805261006c8161008d565b60a052506001600160a01b03831660c0526100856100d3565b5050506102ea565b5f5f829050601f815111156100c0578260405163305a27a960e01b81526004016100b7919061028f565b60405180910390fd5b80516100cb826102c4565b179392505050565b603354610100900460ff161561013b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100b7565b60335460ff9081161461018c576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a2575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101cb575f5ffd5b83516101d68161018e565b60208501519093506101e78161018e565b60408501519092506001600160401b03811115610202575f5ffd5b8401601f81018613610212575f5ffd5b80516001600160401b0381111561022b5761022b6101a5565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610259576102596101a5565b604052818152828201602001881015610270575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e4575f198160200360031b1b821691505b50919050565b60805160a05160c0516117e861033e5f395f818161014d0152818161055a01528181610764015281816108010152610a9901525f6105ca01525f818161023501528181610ae50152610d9601526117e85ff3fe608060405234801561000f575f5ffd5b506004361061011c575f3560e01c8063715018a6116100a9578063f0062d9a1161006e578063f0062d9a1461028e578063f2fde38b146102a0578063fabc1cbc146102b3578063fe38b32d146102c6578063fe575a87146102d9575f5ffd5b8063715018a614610228578063886f1195146102305780638da5cb5b14610257578063b768ebc914610268578063c350a1b51461027b575f5ffd5b8063581dfd65116100ef578063581dfd65146101a1578063595c6a67146101c95780635ac86ab7146101d15780635c975abb146102045780636b9b622914610215575f5ffd5b8063136439dd1461012057806323103c411461013557806339b70e381461014857806354fd4d501461018c575b5f5ffd5b61013361012e366004610e7f565b6102fb565b005b610133610143366004610ede565b610335565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b6101946105c3565b6040516101839190610f4b565b61016f6101af366004610f78565b60016020525f90815260409020546001600160a01b031681565b6101336105f3565b6101f46101df366004610f93565b609954600160ff9092169190911b9081161490565b6040519015158152602001610183565b609954604051908152602001610183565b61016f610223366004610f78565b610607565b6101336107d1565b61016f7f000000000000000000000000000000000000000000000000000000000000000081565b6066546001600160a01b031661016f565b610133610276366004610ede565b6107e2565b610133610289366004610fb3565b610869565b5f5461016f906001600160a01b031681565b6101336102ae366004610f78565b610994565b6101336102c1366004610e7f565b610a0d565b6101336102d4366004610ede565b610a7a565b6101f46102e7366004610f78565b60026020525f908152604090205460ff1681565b610303610ad0565b60995481811681146103285760405163c61dca5d60e01b815260040160405180910390fd5b61033182610b73565b5050565b61033d610bb0565b5f8167ffffffffffffffff81111561035757610357610ff2565b604051908082528060200260200182016040528015610380578160200160208202803683370190505b5090505f805b838110156105395760025f8686848181106103a3576103a3611006565b90506020020160208101906103b89190610f78565b6001600160a01b0316815260208101919091526040015f205460ff16156103f25760405163f53de75f60e01b815260040160405180910390fd5b600160025f87878581811061040957610409611006565b905060200201602081019061041e9190610f78565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b385858381811061047857610478611006565b905060200201602081019061048d9190610f78565b6040516001600160a01b03909116815260200160405180910390a15f60015f8787858181106104be576104be611006565b90506020020160208101906104d39190610f78565b6001600160a01b03908116825260208201929092526040015f20541690508015610530578084848151811061050a5761050a611006565b6001600160a01b03909216602092830291909101909101528261052c8161101a565b9350505b50600101610386565b5080825280156105bd576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061058f90859060040161103e565b5f604051808303815f87803b1580156105a6575f5ffd5b505af11580156105b8573d5f5f3e3d5ffd5b505050505b50505050565b60606105ee7f0000000000000000000000000000000000000000000000000000000000000000610c0a565b905090565b6105fb610ad0565b6106055f19610b73565b565b5f5f61061281610c47565b6001600160a01b0383165f9081526002602052604090205460ff161561064b5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b038381165f9081526001602052604090205416156106835760405163c45546f760e01b815260040160405180910390fd5b5f8054604080516001600160a01b0387811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663189acdbd60e31b17905291519190921691906106da90610e72565b6106e5929190611089565b604051809103905ff0801580156106fe573d5f5f3e3d5ffd5b50905061070b8482610c72565b6040805160018082528183019092525f916020808301908036833701905050905081815f8151811061073f5761073f611006565b6001600160a01b039283166020918202929092010152604051632ef047f960e11b81527f000000000000000000000000000000000000000000000000000000000000000090911690635de08ff29061079b90849060040161103e565b5f604051808303815f87803b1580156107b2575f5ffd5b505af11580156107c4573d5f5f3e3d5ffd5b5093979650505050505050565b6107d9610bb0565b6106055f610cdc565b6107ea610bb0565b604051632ef047f960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635de08ff29061083890859085906004016110b4565b5f604051808303815f87803b15801561084f575f5ffd5b505af1158015610861573d5f5f3e3d5ffd5b505050505050565b603354610100900460ff16158080156108895750603354600160ff909116105b806108a35750303b1580156108a3575060335460ff166001145b61090b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff19166001179055801561092e576033805461ff0019166101001790555b61093784610cdc565b61094083610b73565b61094982610d2d565b80156105bd576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b61099c610bb0565b6001600160a01b038116610a015760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610902565b610a0a81610cdc565b50565b610a15610d94565b60995480198219811614610a3c5760405163c61dca5d60e01b815260040160405180910390fd5b609982905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b610a82610bb0565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061083890859085906004016110b4565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b32573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b569190611100565b61060557604051631d77d47760e21b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6066546001600160a01b031633146106055760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610902565b60605f610c1683610e45565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b609954600160ff83161b90811603610a0a5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038281165f8181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610df0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e14919061111f565b6001600160a01b0316336001600160a01b0316146106055760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e6c57604051632cd44ac360e21b815260040160405180910390fd5b92915050565b6106788061113b83390190565b5f60208284031215610e8f575f5ffd5b5035919050565b5f5f83601f840112610ea6575f5ffd5b50813567ffffffffffffffff811115610ebd575f5ffd5b6020830191508360208260051b8501011115610ed7575f5ffd5b9250929050565b5f5f60208385031215610eef575f5ffd5b823567ffffffffffffffff811115610f05575f5ffd5b610f1185828601610e96565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610f5d6020830184610f1d565b9392505050565b6001600160a01b0381168114610a0a575f5ffd5b5f60208284031215610f88575f5ffd5b8135610f5d81610f64565b5f60208284031215610fa3575f5ffd5b813560ff81168114610f5d575f5ffd5b5f5f5f60608486031215610fc5575f5ffd5b8335610fd081610f64565b9250602084013591506040840135610fe781610f64565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f6001820161103757634e487b7160e01b5f52601160045260245ffd5b5060010190565b602080825282518282018190525f918401906040840190835b8181101561107e5783516001600160a01b0316835260209384019390920191600101611057565b509095945050505050565b6001600160a01b03831681526040602082018190525f906110ac90830184610f1d565b949350505050565b602080825281018290525f8360408301825b858110156110f65782356110d981610f64565b6001600160a01b03168252602092830192909101906001016110c6565b5095945050505050565b5f60208284031215611110575f5ffd5b81518015158114610f5d575f5ffd5b5f6020828403121561112f575f5ffd5b8151610f5d81610f6456fe6080604052604051610678380380610678833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106516027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610131806105205f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b60b3565b565b5f60527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015608c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060ae919060d0565b905090565b365f5f375f5f365f845af43d5f5f3e80801560cc573d5ff35b3d5ffd5b5f6020828403121560df575f5ffd5b81516001600160a01b038116811460f4575f5ffd5b939250505056fea26469706673582212207573e4acc6548d8cd1e28bdca26daa72e4f1b0a60bbb765db580a0b95e2b21b464736f6c634300081b0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220262fd104eb8b8a554925cbc9fef53ed1f9cfdafce722bb6068ca57d6666e337c64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_strategyManager\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"blacklistTokens\",\"inputs\":[{\"name\":\"tokens\",\"type\":\"address[]\",\"internalType\":\"contractIERC20[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_strategyBeacon\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isBlacklisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategyManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", + Bin: "0x60c060405234801561000f575f5ffd5b506040516118d83803806118d883398101604081905261002e9161014e565b806001600160a01b038116610056576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b03908116608052821660a052610071610078565b5050610186565b603354610100900460ff16156100e45760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60335460ff90811614610135576033805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b038116811461014b575f5ffd5b50565b5f5f6040838503121561015f575f5ffd5b825161016a81610137565b602084015190925061017b81610137565b809150509250929050565b60805160a0516117076101d15f395f81816101420152818161053a01528181610714015281816107b10152610a4901525f818161021501528181610a950152610d0901526117075ff3fe608060405234801561000f575f5ffd5b5060043610610111575f3560e01c8063886f11951161009e578063f0062d9a1161006e578063f0062d9a1461026e578063f2fde38b14610280578063fabc1cbc14610293578063fe38b32d146102a6578063fe575a87146102b9575f5ffd5b8063886f1195146102105780638da5cb5b14610237578063b768ebc914610248578063c350a1b51461025b575f5ffd5b8063595c6a67116100e4578063595c6a67146101a95780635ac86ab7146101b15780635c975abb146101e45780636b9b6229146101f5578063715018a614610208575f5ffd5b8063136439dd1461011557806323103c411461012a57806339b70e381461013d578063581dfd6514610181575b5f5ffd5b610128610123366004610dc5565b6102db565b005b610128610138366004610e24565b610315565b6101647f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61016461018f366004610e77565b60016020525f90815260409020546001600160a01b031681565b6101286105a3565b6101d46101bf366004610e99565b609954600160ff9092169190911b9081161490565b6040519015158152602001610178565b609954604051908152602001610178565b610164610203366004610e77565b6105b7565b610128610781565b6101647f000000000000000000000000000000000000000000000000000000000000000081565b6066546001600160a01b0316610164565b610128610256366004610e24565b610792565b610128610269366004610eb9565b610819565b5f54610164906001600160a01b031681565b61012861028e366004610e77565b610944565b6101286102a1366004610dc5565b6109bd565b6101286102b4366004610e24565b610a2a565b6101d46102c7366004610e77565b60026020525f908152604090205460ff1681565b6102e3610a80565b60995481811681146103085760405163c61dca5d60e01b815260040160405180910390fd5b61031182610b23565b5050565b61031d610b60565b5f8167ffffffffffffffff81111561033757610337610ef8565b604051908082528060200260200182016040528015610360578160200160208202803683370190505b5090505f805b838110156105195760025f86868481811061038357610383610f0c565b90506020020160208101906103989190610e77565b6001600160a01b0316815260208101919091526040015f205460ff16156103d25760405163f53de75f60e01b815260040160405180910390fd5b600160025f8787858181106103e9576103e9610f0c565b90506020020160208101906103fe9190610e77565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f75519c51f39873ec0e27dd3bbc09549e4865a113f505393fb9eab5898f6418b385858381811061045857610458610f0c565b905060200201602081019061046d9190610e77565b6040516001600160a01b03909116815260200160405180910390a15f60015f87878581811061049e5761049e610f0c565b90506020020160208101906104b39190610e77565b6001600160a01b03908116825260208201929092526040015f2054169050801561051057808484815181106104ea576104ea610f0c565b6001600160a01b03909216602092830291909101909101528261050c81610f20565b9350505b50600101610366565b50808252801561059d576040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b89061056f908590600401610f44565b5f604051808303815f87803b158015610586575f5ffd5b505af1158015610598573d5f5f3e3d5ffd5b505050505b50505050565b6105ab610a80565b6105b55f19610b23565b565b5f5f6105c281610bba565b6001600160a01b0383165f9081526002602052604090205460ff16156105fb5760405163091867bd60e11b815260040160405180910390fd5b6001600160a01b038381165f9081526001602052604090205416156106335760405163c45546f760e01b815260040160405180910390fd5b5f8054604080516001600160a01b0387811660248084019190915283518084039091018152604490920183526020820180516001600160e01b031663189acdbd60e31b179052915191909216919061068a90610db8565b610695929190610f8f565b604051809103905ff0801580156106ae573d5f5f3e3d5ffd5b5090506106bb8482610be5565b6040805160018082528183019092525f916020808301908036833701905050905081815f815181106106ef576106ef610f0c565b6001600160a01b039283166020918202929092010152604051632ef047f960e11b81527f000000000000000000000000000000000000000000000000000000000000000090911690635de08ff29061074b908490600401610f44565b5f604051808303815f87803b158015610762575f5ffd5b505af1158015610774573d5f5f3e3d5ffd5b5093979650505050505050565b610789610b60565b6105b55f610c4f565b61079a610b60565b604051632ef047f960e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690635de08ff2906107e89085908590600401610fd3565b5f604051808303815f87803b1580156107ff575f5ffd5b505af1158015610811573d5f5f3e3d5ffd5b505050505050565b603354610100900460ff16158080156108395750603354600160ff909116105b806108535750303b158015610853575060335460ff166001145b6108bb5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6033805460ff1916600117905580156108de576033805461ff0019166101001790555b6108e784610c4f565b6108f083610b23565b6108f982610ca0565b801561059d576033805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050565b61094c610b60565b6001600160a01b0381166109b15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108b2565b6109ba81610c4f565b50565b6109c5610d07565b609954801982198116146109ec5760405163c61dca5d60e01b815260040160405180910390fd5b609982905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b610a32610b60565b6040516316bb16b760e31b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063b5d8b5b8906107e89085908590600401610fd3565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ae2573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b06919061101f565b6105b557604051631d77d47760e21b815260040160405180910390fd5b609981905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b6066546001600160a01b031633146105b55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108b2565b609954600160ff83161b908116036109ba5760405163840a48d560e01b815260040160405180910390fd5b6001600160a01b038281165f8181526001602090815260409182902080546001600160a01b031916948616948517905581519283528201929092527f6852a55230ef089d785bce7ffbf757985de34026df90a87d7b4a6e56f95d251f910160405180910390a15050565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f54604080516001600160a01b03928316815291831660208301527fe21755962a7d7e100b59b9c3e4d4b54085b146313719955efb6a7a25c5c7feee910160405180910390a15f80546001600160a01b0319166001600160a01b0392909216919091179055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d63573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d87919061103e565b6001600160a01b0316336001600160a01b0316146105b55760405163794821ff60e01b815260040160405180910390fd5b6106788061105a83390190565b5f60208284031215610dd5575f5ffd5b5035919050565b5f5f83601f840112610dec575f5ffd5b50813567ffffffffffffffff811115610e03575f5ffd5b6020830191508360208260051b8501011115610e1d575f5ffd5b9250929050565b5f5f60208385031215610e35575f5ffd5b823567ffffffffffffffff811115610e4b575f5ffd5b610e5785828601610ddc565b90969095509350505050565b6001600160a01b03811681146109ba575f5ffd5b5f60208284031215610e87575f5ffd5b8135610e9281610e63565b9392505050565b5f60208284031215610ea9575f5ffd5b813560ff81168114610e92575f5ffd5b5f5f5f60608486031215610ecb575f5ffd5b8335610ed681610e63565b9250602084013591506040840135610eed81610e63565b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f60018201610f3d57634e487b7160e01b5f52601160045260245ffd5b5060010190565b602080825282518282018190525f918401906040840190835b81811015610f845783516001600160a01b0316835260209384019390920191600101610f5d565b509095945050505050565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b602080825281018290525f8360408301825b85811015611015578235610ff881610e63565b6001600160a01b0316825260209283019290910190600101610fe5565b5095945050505050565b5f6020828403121561102f575f5ffd5b81518015158114610e92575f5ffd5b5f6020828403121561104e575f5ffd5b8151610e9281610e6356fe6080604052604051610678380380610678833981016040819052610022916103ed565b61002d82825f610034565b5050610513565b61003d836100f1565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a25f8251118061007c5750805b156100ec576100ea836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e491906104af565b83610273565b505b505050565b6001600160a01b0381163b61015b5760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101cd816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be91906104af565b6001600160a01b03163b151590565b6102325760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610152565b7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392909216919091179055565b606061029883836040518060600160405280602781526020016106516027913961029f565b9392505050565b60605f5f856001600160a01b0316856040516102bb91906104c8565b5f60405180830381855af49150503d805f81146102f3576040519150601f19603f3d011682016040523d82523d5f602084013e6102f8565b606091505b50909250905061030a86838387610314565b9695505050505050565b606083156103825782515f0361037b576001600160a01b0385163b61037b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610152565b508161038c565b61038c8383610394565b949350505050565b8151156103a45781518083602001fd5b8060405162461bcd60e51b815260040161015291906104de565b80516001600160a01b03811681146103d4575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156103fe575f5ffd5b610407836103be565b60208401519092506001600160401b03811115610422575f5ffd5b8301601f81018513610432575f5ffd5b80516001600160401b0381111561044b5761044b6103d9565b604051601f8201601f19908116603f011681016001600160401b0381118282101715610479576104796103d9565b604052818152828201602001871015610490575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f602082840312156104bf575f5ffd5b610298826103be565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610131806105205f395ff3fe608060405236601057600e6013565b005b600e5b601f601b6021565b60b3565b565b5f60527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015608c573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019060ae919060d0565b905090565b365f5f375f5f365f845af43d5f5f3e80801560cc573d5ff35b3d5ffd5b5f6020828403121560df575f5ffd5b81516001600160a01b038116811460f4575f5ffd5b939250505056fea26469706673582212207b94aecb5f7696f142cc1acc4dea07c18e8f9d41766baf4a3c001a89adb8a8a764736f6c634300081e0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212207047c8c0de18e13a98ca9f8e2128ab250c892bc6b94bc188477aefe7b92c797d64736f6c634300081e0033", } // StrategyFactoryABI is the input ABI used to generate the binding from. @@ -44,7 +44,7 @@ var StrategyFactoryABI = StrategyFactoryMetaData.ABI var StrategyFactoryBin = StrategyFactoryMetaData.Bin // DeployStrategyFactory deploys a new Ethereum contract, binding an instance of StrategyFactory to it. -func DeployStrategyFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address, _version string) (common.Address, *types.Transaction, *StrategyFactory, error) { +func DeployStrategyFactory(auth *bind.TransactOpts, backend bind.ContractBackend, _strategyManager common.Address, _pauserRegistry common.Address) (common.Address, *types.Transaction, *StrategyFactory, error) { parsed, err := StrategyFactoryMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -53,7 +53,7 @@ func DeployStrategyFactory(auth *bind.TransactOpts, backend bind.ContractBackend return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyFactoryBin), backend, _strategyManager, _pauserRegistry, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(StrategyFactoryBin), backend, _strategyManager, _pauserRegistry) if err != nil { return common.Address{}, nil, nil, err } @@ -450,37 +450,6 @@ func (_StrategyFactory *StrategyFactoryCallerSession) StrategyManager() (common. return _StrategyFactory.Contract.StrategyManager(&_StrategyFactory.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactory *StrategyFactoryCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StrategyFactory.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactory *StrategyFactorySession) Version() (string, error) { - return _StrategyFactory.Contract.Version(&_StrategyFactory.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactory *StrategyFactoryCallerSession) Version() (string, error) { - return _StrategyFactory.Contract.Version(&_StrategyFactory.CallOpts) -} - // BlacklistTokens is a paid mutator transaction binding the contract method 0x23103c41. // // Solidity: function blacklistTokens(address[] tokens) returns() diff --git a/pkg/bindings/StrategyFactoryStorage/binding.go b/pkg/bindings/StrategyFactoryStorage/binding.go index 6383a87ffd..c967b62fd8 100644 --- a/pkg/bindings/StrategyFactoryStorage/binding.go +++ b/pkg/bindings/StrategyFactoryStorage/binding.go @@ -31,7 +31,7 @@ var ( // StrategyFactoryStorageMetaData contains all meta data concerning the StrategyFactoryStorage contract. var StrategyFactoryStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isBlacklisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"deployNewStrategy\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"newStrategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"deployedStrategies\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isBlacklisted\",\"inputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIERC20\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"strategyBeacon\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIBeacon\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"whitelistStrategies\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"StrategyBeaconModified\",\"inputs\":[{\"name\":\"previousBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"},{\"name\":\"newBeacon\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIBeacon\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategySetForToken\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TokenBlacklisted\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIERC20\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AlreadyBlacklisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"BlacklistedToken\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyExists\",\"inputs\":[]}]", } // StrategyFactoryStorageABI is the input ABI used to generate the binding from. @@ -273,37 +273,6 @@ func (_StrategyFactoryStorage *StrategyFactoryStorageCallerSession) StrategyBeac return _StrategyFactoryStorage.Contract.StrategyBeacon(&_StrategyFactoryStorage.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactoryStorage *StrategyFactoryStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StrategyFactoryStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactoryStorage *StrategyFactoryStorageSession) Version() (string, error) { - return _StrategyFactoryStorage.Contract.Version(&_StrategyFactoryStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyFactoryStorage *StrategyFactoryStorageCallerSession) Version() (string, error) { - return _StrategyFactoryStorage.Contract.Version(&_StrategyFactoryStorage.CallOpts) -} - // DeployNewStrategy is a paid mutator transaction binding the contract method 0x6b9b6229. // // Solidity: function deployNewStrategy(address token) returns(address newStrategy) diff --git a/pkg/bindings/StrategyManager/binding.go b/pkg/bindings/StrategyManager/binding.go index 88bb793a0a..5cdf736135 100644 --- a/pkg/bindings/StrategyManager/binding.go +++ b/pkg/bindings/StrategyManager/binding.go @@ -38,7 +38,7 @@ type OperatorSet struct { // StrategyManagerMetaData contains all meta data concerning the StrategyManager contract. var StrategyManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_allocationManager\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"},{\"name\":\"_delegation\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"},{\"name\":\"_pauserRegistry\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"DEFAULT_BURN_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"domainSeparator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"sharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"pauseAll\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[{\"name\":\"index\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"pauserRegistry\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIPauserRegistry\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"whitelisted\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"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\":\"unpause\",\"inputs\":[{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"Paused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Unpaused\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newPausedStatus\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CurrentlyPaused\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InputAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidNewPausedStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyPauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyUnpauser\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SignatureExpired\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]}]", - Bin: "0x610100604052348015610010575f5ffd5b506040516139d73803806139d783398101604081905261002f916101bc565b80808585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007c81610093565b60e0525061008a90506100d9565b50505050610301565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd91906102a6565b60405180910390fd5b80516100d1826102db565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cf575f5ffd5b84516101da81610191565b60208601519094506101eb81610191565b60408601519093506101fc81610191565b60608601519092506001600160401b03811115610217575f5ffd5b8501601f81018713610227575f5ffd5b80516001600160401b03811115610240576102406101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026e5761026e6101a8565b604052818152828201602001891015610285575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102fb575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161365d61037a5f395f81816110a8015261247401525f81816105fa015281816108c101528181610da30152818161103a0152818161125501526120a901525f81816105a001528181610815015261141a01525f81816104b601528181611aaa01526124e3015261365d5ff3fe608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f00000000000000000000000000000000000000000000000000000000000000006122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f00000000000000000000000000000000000000000000000000000000000000006122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212200ff9eede575454cb6fa0ed8d668d35008dfe530f8c5e03454b93576133b1c85164736f6c634300081b0033", + Bin: "0x610100604052348015610010575f5ffd5b506040516139d73803806139d783398101604081905261002f916101bc565b80808585856001600160a01b03811661005b576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805291821660a0521660c05261007c81610093565b60e0525061008a90506100d9565b50505050610301565b5f5f829050601f815111156100c6578260405163305a27a960e01b81526004016100bd91906102a6565b60405180910390fd5b80516100d1826102db565b179392505050565b5f54610100900460ff16156101405760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100bd565b5f5460ff9081161461018f575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101a5575f5ffd5b50565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101cf575f5ffd5b84516101da81610191565b60208601519094506101eb81610191565b60408601519093506101fc81610191565b60608601519092506001600160401b03811115610217575f5ffd5b8501601f81018713610227575f5ffd5b80516001600160401b03811115610240576102406101a8565b604051601f8201601f19908116603f011681016001600160401b038111828210171561026e5761026e6101a8565b604052818152828201602001891015610285575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102fb575f198160200360031b1b821691505b50919050565b60805160a05160c05160e05161365d61037a5f395f81816110a8015261247401525f81816105fa015281816108c101528181610da30152818161103a0152818161125501526120a901525f81816105a001528181610815015261141a01525f81816104b601528181611aaa01526124e3015261365d5ff3fe608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f000000000000000000000000000000000000000000000000000000000000000081565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f00000000000000000000000000000000000000000000000000000000000000006122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f000000000000000000000000000000000000000000000000000000000000000090911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f00000000000000000000000000000000000000000000000000000000000000006122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b1bedd5fdd4bc818f929aa1ce4bdccff161cf1863a6ee6ebbb78baa293114c0a64736f6c634300081e0033", } // StrategyManagerABI is the input ABI used to generate the binding from. diff --git a/pkg/bindings/StrategyManagerStorage/binding.go b/pkg/bindings/StrategyManagerStorage/binding.go index 552f06e830..f20f304638 100644 --- a/pkg/bindings/StrategyManagerStorage/binding.go +++ b/pkg/bindings/StrategyManagerStorage/binding.go @@ -37,7 +37,7 @@ type OperatorSet struct { // StrategyManagerStorageMetaData contains all meta data concerning the StrategyManagerStorage contract. var StrategyManagerStorageMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_BURN_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"whitelisted\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]}]", + ABI: "[{\"type\":\"function\",\"name\":\"DEFAULT_BURN_ADDRESS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"DEPOSIT_TYPEHASH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"addShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"addStrategiesToDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"allocationManager\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIAllocationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"burnShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"calculateStrategyDepositDigestHash\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"clearBurnOrRedistributableSharesByStrategy\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"delegation\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIDelegationManager\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"depositIntoStrategy\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"depositIntoStrategyWithSignature\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"amount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"expiry\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"signature\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"depositShares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableCount\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBurnableShares\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getDeposits\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingOperatorSets\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple[]\",\"internalType\":\"structOperatorSet[]\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getPendingSlashIds\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getStrategiesWithBurnableShares\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address[]\",\"internalType\":\"address[]\"},{\"name\":\"\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"increaseBurnOrRedistributableShares\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"addedSharesToBurn\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialPausedStatus\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"nonces\",\"inputs\":[{\"name\":\"signer\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"nonce\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"removeDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"depositSharesToRemove\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"removeStrategiesFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategiesToRemoveFromWhitelist\",\"type\":\"address[]\",\"internalType\":\"contractIStrategy[]\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setStrategyWhitelister\",\"inputs\":[{\"name\":\"newStrategyWhitelister\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"stakerDepositShares\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyList\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"strategies\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"stakerStrategyListLength\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyIsWhitelistedForDeposit\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"}],\"outputs\":[{\"name\":\"whitelisted\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"strategyWhitelister\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"withdrawSharesAsTokens\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"internalType\":\"contractIStrategy\"},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"shares\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesDecreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnOrRedistributableSharesIncreased\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"slashId\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"BurnableSharesDecreased\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Deposit\",\"inputs\":[{\"name\":\"staker\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"},{\"name\":\"shares\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyAddedToDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyRemovedFromDepositWhitelist\",\"inputs\":[{\"name\":\"strategy\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"contractIStrategy\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"StrategyWhitelisterChanged\",\"inputs\":[{\"name\":\"previousAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"newAddress\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"MaxStrategiesExceeded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyDelegationManager\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"OnlyStrategyWhitelister\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountTooHigh\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SharesAmountZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StakerAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyAlreadyInSlash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StrategyNotWhitelisted\",\"inputs\":[]}]", } // StrategyManagerStorageABI is the input ABI used to generate the binding from. @@ -809,37 +809,6 @@ func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) StrategyWhit return _StrategyManagerStorage.Contract.StrategyWhitelister(&_StrategyManagerStorage.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyManagerStorage *StrategyManagerStorageCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _StrategyManagerStorage.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyManagerStorage *StrategyManagerStorageSession) Version() (string, error) { - return _StrategyManagerStorage.Contract.Version(&_StrategyManagerStorage.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_StrategyManagerStorage *StrategyManagerStorageCallerSession) Version() (string, error) { - return _StrategyManagerStorage.Contract.Version(&_StrategyManagerStorage.CallOpts) -} - // AddShares is a paid mutator transaction binding the contract method 0x50ff7225. // // Solidity: function addShares(address staker, address strategy, uint256 shares) returns(uint256, uint256) diff --git a/pkg/bindings/TaskMailbox/binding.go b/pkg/bindings/TaskMailbox/binding.go index 0502eff7cd..4df57d68d5 100644 --- a/pkg/bindings/TaskMailbox/binding.go +++ b/pkg/bindings/TaskMailbox/binding.go @@ -120,8 +120,8 @@ type OperatorSet struct { // TaskMailboxMetaData contains all meta data concerning the TaskMailbox contract. var TaskMailboxMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_maxTaskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"_version\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BN254_CERTIFICATE_VERIFIER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ECDSA_CERTIFICATE_VERIFIER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_TASK_SLA\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createTask\",\"inputs\":[{\"name\":\"taskParams\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.TaskParams\",\"components\":[{\"name\":\"refundCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"executorOperatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeSplit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeSplitCollector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254CertificateBytes\",\"inputs\":[{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getECDSACertificateBytes\",\"inputs\":[{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getExecutorOperatorSetTaskConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMessageHash\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTaskInfo\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Task\",\"components\":[{\"name\":\"creator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"creationTime\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"refundCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"},{\"name\":\"isFeeRefunded\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"operatorTableReferenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"executorOperatorSetTaskConfig\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTaskResult\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTaskStatus\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"_feeSplitCollector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isExecutorOperatorSetRegistered\",\"inputs\":[{\"name\":\"operatorSetKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"isRegistered\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"refundFee\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerExecutorOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"isRegistered\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setExecutorOperatorSetTaskConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeSplit\",\"inputs\":[{\"name\":\"_feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeSplitCollector\",\"inputs\":[{\"name\":\"_feeSplitCollector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitResult\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"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\":\"ExecutorOperatorSetRegistered\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"isRegistered\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutorOperatorSetTaskConfigSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeRefunded\",\"inputs\":[{\"name\":\"refundCollector\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeSplitCollectorSet\",\"inputs\":[{\"name\":\"feeSplitCollector\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeSplitSet\",\"inputs\":[{\"name\":\"feeSplit\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"TaskCreated\",\"inputs\":[{\"name\":\"creator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorTableReferenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"refundCollector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"taskDeadline\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TaskVerified\",\"inputs\":[{\"name\":\"aggregator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyCertificateSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutorOperatorSetNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutorOperatorSetTaskConfigNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeAlreadyRefunded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConsensusType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConsensusValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidFeeReceiver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidFeeSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidReferenceTimestamp\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidShortString\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTaskCreator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTaskStatus\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"}]},{\"type\":\"error\",\"name\":\"OnlyRefundCollector\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadIsEmpty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"StringTooLong\",\"inputs\":[{\"name\":\"str\",\"type\":\"string\",\"internalType\":\"string\"}]},{\"type\":\"error\",\"name\":\"TaskSLAExceedsMaximum\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThresholdNotMet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampAtCreation\",\"inputs\":[]}]", - Bin: "0x610100604052348015610010575f5ffd5b50604051615d1b380380615d1b83398101604081905261002f9161019b565b6001600160a01b03808516608052831660a0526001600160601b03821660c052806100598161006e565b60e052506100656100b4565b505050506102e6565b5f5f829050601f815111156100a1578260405163305a27a960e01b8152600401610098919061028b565b60405180910390fd5b80516100ac826102c0565b179392505050565b5f54610100900460ff161561011b5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608401610098565b5f5460ff9081161461016a575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b0381168114610182575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f608085870312156101ae575f5ffd5b6101b78561016c565b93506101c56020860161016c565b60408601519093506001600160601b03811681146101e1575f5ffd5b60608601519092506001600160401b038111156101fc575f5ffd5b8501601f8101871361020c575f5ffd5b80516001600160401b0381111561022557610225610187565b604051601f8201601f19908116603f011681016001600160401b038111828210171561025357610253610187565b60405281815282820160200189101561026a575f5ffd5b8160208401602083015e5f6020838301015280935050505092959194509250565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156102e0575f198160200360031b1b821691505b50919050565b60805160a05160c05160e0516159d161034a5f395f611ae301525f81816103670152612f2001525f818161027f0152818161328f015281816138a10152613ac401525f81816103cc0152818161324f015281816137cf01526139f101526159d15ff3fe608060405234801561000f575f5ffd5b506004361061016d575f3560e01c80636373ea69116100d9578063a5fabc8111610093578063f2fde38b1161006e578063f2fde38b146103a1578063f741e81a146103b4578063f7424fc9146103c7578063fa2c0b37146103ee575f5ffd5b8063a5fabc811461033c578063b86941661461034f578063d3e043aa14610362575f5ffd5b80636373ea69146102bc578063678fbdb3146102dd5780636bf6fad5146102f0578063708c0db914610310578063715018a6146103235780638da5cb5b1461032b575f5ffd5b8063468c07a01161012a578063468c07a01461023257806349acd884146102475780634ad52e021461025a57806354743ad21461027a57806354fd4d50146102a157806362fee037146102a9575f5ffd5b80631270a892146101715780631a20c5051461019a5780631ae370eb146101cb5780631fb66f5d146101de5780632bf6cc79146101ff57806337eaa1041461021f575b5f5ffd5b61018461017f366004614271565b610420565b6040516101919190614326565b60405180910390f35b609b546101b3906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610191565b6101846101d9366004614583565b610449565b6101f16101ec3660046146c2565b61045c565b604051908152602001610191565b61021261020d366004614737565b610e05565b6040516101919190614776565b6101f161022d366004614784565b6112b1565b6102456102403660046147d6565b6112e4565b005b6102456102553660046147fe565b6112f8565b61026d610268366004614737565b611543565b604051610191919061491a565b6101b37f000000000000000000000000000000000000000000000000000000000000000081565b610184611adc565b6101846102b7366004614737565b611b0c565b609b546102ca9061ffff1681565b60405161ffff9091168152602001610191565b6102456102eb366004614a65565b612009565b6103036102fe366004614a80565b61201a565b6040516101919190614a9a565b61024561031e366004614aac565b61222e565b61024561235f565b6033546001600160a01b03166101b3565b61024561034a366004614af4565b612372565b61024561035d366004614737565b612c50565b6103897f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160601b039091168152602001610191565b6102456103af366004614a65565b612e82565b6102456103c2366004614be6565b612ef8565b6101b37f000000000000000000000000000000000000000000000000000000000000000081565b6104106103fc366004614737565b60996020525f908152604090205460ff1681565b6040519015158152602001610191565b6060816040516020016104339190614d11565b6040516020818303038152906040529050919050565b6060816040516020016104339190614e95565b5f61046561312d565b5f8260400151511161048a57604051636b1a1b6960e11b815260040160405180910390fd5b60995f61049a8460200151613186565b815260208101919091526040015f205460ff166104ca5760405163c292b29760e01b815260040160405180910390fd5b5f609a5f6104db8560200151613186565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff1660028111156105495761054961474e565b600281111561055a5761055a61474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff16600181111561059b5761059b61474e565b60018111156105ac576105ac61474e565b81526020016001820180546105c090614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546105ec90614ea7565b80156106375780601f1061060e57610100808354040283529160200191610637565b820191905f5260205f20905b81548152906001019060200180831161061a57829003601f168201915b505050505081525050815260200160058201805461065490614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461068090614ea7565b80156106cb5780601f106106a2576101008083540402835291602001916106cb565b820191905f5260205f20905b8154815290600101906020018083116106ae57829003601f168201915b50505050508152505090506106df816131e9565b6106fc576040516314b0a41d60e11b815260040160405180910390fd5b5f61070a8260600151613232565b90505f816001600160a01b0316635ddb9b5b86602001516040518263ffffffff1660e01b815260040161073d9190614efd565b602060405180830381865afa158015610758573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614f0b565b90505f826001600160a01b0316636141879e87602001516040518263ffffffff1660e01b81526004016107af9190614efd565b602060405180830381865afa1580156107ca573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107ee9190614f0b565b905063ffffffff8116158061082a57506108088183614f3a565b63ffffffff1684602001516001600160601b0316426108279190614f56565b11155b6108475760405163640fcd6b60e11b815260040160405180910390fd5b508251604051630a3fc61360e31b81526001600160a01b03909116906351fe3098906108799033908990600401614fa4565b5f6040518083038186803b15801561088f575f5ffd5b505afa1580156108a1573d5f5f3e3d5ffd5b50508451604051637036693f60e11b81525f93506001600160a01b03909116915063e06cd27e906108d6908990600401614fc7565b602060405180830381865afa1580156108f1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109159190614fd9565b90505f6097543046896040516020016109319493929190614ff4565b60405160208183030381529060405280519060200120905060975460016109589190614f56565b609755604080516101c0810190915233815260208101610977426132cc565b6001600160601b03908116825260208a81018051516001600160a01b039081168386015292871660408501528b5190921660608401529051015163ffffffff166080820152609b5461ffff1660a082015260c001600181525f602080830182905263ffffffff80881660408086019190915260608086018c90528d8201516080808801919091528251808601845286815260a0808901919091528351808701855287815260c09889015289875260988652958390208851958901516001600160601b03908116600160a01b9081026001600160a01b03988916178355948a0151938a0151168402928616929092176001830155870151600282018054968901519789015161ffff16600160c01b0261ffff60c01b19989095169093026001600160c01b0319909616941693909317939093179384168117835560e0850151919391929160ff60d01b1990911662ffffff60c01b1990911617600160d01b836003811115610ae657610ae661474e565b02179055506101008201516002808301805461012086015163ffffffff16600160e01b026001600160e01b03941515600160d81b02949094166001600160d81b039091161792909217909155610140830151805160208201516001600160601b0316600160a01b9081026001600160a01b0392831617600386019081556040840151600487018054919094166001600160a01b031982168117855560608601519596929594936001600160a81b031990921617918490811115610bab57610bab61474e565b021790555060808201516002820180546001600160a01b0319166001600160a01b0390921691909117905560a08201518051600383018054909190829060ff191660018381811115610bff57610bff61474e565b021790555060208201516001820190610c189082615075565b50505060c08201516005820190610c2f9082615075565b5050506101608201516009820190610c479082615075565b50610180820151600a820190610c5d9082615075565b506101a0820151600b820190610c739082615075565b50505060408501516001600160a01b031615801590610c9a57505f826001600160601b0316115b15610d155760808501516001600160a01b0316610cca57604051633480121760e21b815260040160405180910390fd5b86516001600160a01b0316610cf257604051633480121760e21b815260040160405180910390fd5b6040850151610d15906001600160a01b031633306001600160601b038616613337565b8451604051629c5c4560e41b8152600481018390526001600160a01b03909116906309c5c450906024015f604051808303815f87803b158015610d56575f5ffd5b505af1158015610d68573d5f5f3e3d5ffd5b5050505086602001515f01516001600160a01b031681336001600160a01b03167f33add0b01e02278be5459fbfa3274aee699ec47f4ee7236b59e7a2c8b5000c268a6020015160200151878c5f0151888c602001516001600160601b031642610dd19190614f56565b8f60400151604051610de89695949392919061512f565b60405180910390a4945050505050610e006001606555565b919050565b5f81815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c084015283929160e0830190600160d01b900460ff166003811115610eb157610eb161474e565b6003811115610ec257610ec261474e565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b03169684019690965260048901549586169383019390935260609687019691959094918601939290910490911690811115610f6057610f6061474e565b6002811115610f7157610f7161474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff166001811115610fb257610fb261474e565b6001811115610fc357610fc361474e565b8152602001600182018054610fd790614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461100390614ea7565b801561104e5780601f106110255761010080835404028352916020019161104e565b820191905f5260205f20905b81548152906001019060200180831161103157829003601f168201915b505050505081525050815260200160058201805461106b90614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461109790614ea7565b80156110e25780601f106110b9576101008083540402835291602001916110e2565b820191905f5260205f20905b8154815290600101906020018083116110c557829003601f168201915b50505050508152505081526020016009820180546110ff90614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461112b90614ea7565b80156111765780601f1061114d57610100808354040283529160200191611176565b820191905f5260205f20905b81548152906001019060200180831161115957829003601f168201915b50505050508152602001600a8201805461118f90614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546111bb90614ea7565b80156112065780601f106111dd57610100808354040283529160200191611206565b820191905f5260205f20905b8154815290600101906020018083116111e957829003601f168201915b50505050508152602001600b8201805461121f90614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461124b90614ea7565b80156112965780601f1061126d57610100808354040283529160200191611296565b820191905f5260205f20905b81548152906001019060200180831161127957829003601f168201915b50505050508152505090506112aa816133a9565b9392505050565b5f82826040516020016112c5929190615188565b6040516020818303038152906040528051906020012090505b92915050565b6112ec613404565b6112f58161345e565b50565b5f609a5f61130585613186565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff1660028111156113735761137361474e565b60028111156113845761138461474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156113c5576113c561474e565b60018111156113d6576113d661474e565b81526020016001820180546113ea90614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461141690614ea7565b80156114615780601f1061143857610100808354040283529160200191611461565b820191905f5260205f20905b81548152906001019060200180831161144457829003601f168201915b505050505081525050815260200160058201805461147e90614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546114aa90614ea7565b80156114f55780601f106114cc576101008083540402835291602001916114f5565b820191905f5260205f20905b8154815290600101906020018083116114d857829003601f168201915b5050505050815250509050611509816131e9565b611526576040516314b0a41d60e11b815260040160405180910390fd5b6115348382606001516134cf565b61153e8383613570565b505050565b61154b614051565b5f82815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c08401529060e0830190600160d01b900460ff1660038111156115f5576115f561474e565b60038111156116065761160661474e565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b031696840196909652600489015495861693830193909352606096870196919590949186019392909104909116908111156116a4576116a461474e565b60028111156116b5576116b561474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156116f6576116f661474e565b60018111156117075761170761474e565b815260200160018201805461171b90614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461174790614ea7565b80156117925780601f1061176957610100808354040283529160200191611792565b820191905f5260205f20905b81548152906001019060200180831161177557829003601f168201915b50505050508152505081526020016005820180546117af90614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546117db90614ea7565b80156118265780601f106117fd57610100808354040283529160200191611826565b820191905f5260205f20905b81548152906001019060200180831161180957829003601f168201915b505050505081525050815260200160098201805461184390614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461186f90614ea7565b80156118ba5780601f10611891576101008083540402835291602001916118ba565b820191905f5260205f20905b81548152906001019060200180831161189d57829003601f168201915b50505050508152602001600a820180546118d390614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546118ff90614ea7565b801561194a5780601f106119215761010080835404028352916020019161194a565b820191905f5260205f20905b81548152906001019060200180831161192d57829003601f168201915b50505050508152602001600b8201805461196390614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461198f90614ea7565b80156119da5780601f106119b1576101008083540402835291602001916119da565b820191905f5260205f20905b8154815290600101906020018083116119bd57829003601f168201915b5050505050815250509050604051806101c00160405280825f01516001600160a01b0316815260200182602001516001600160601b0316815260200182604001516001600160a01b0316815260200182606001516001600160601b0316815260200182608001516001600160a01b031681526020018260a0015163ffffffff1681526020018260c0015161ffff168152602001611a76836133a9565b6003811115611a8757611a8761474e565b81526020018261010001511515815260200182610120015163ffffffff168152602001826101400151815260200182610160015181526020018261018001518152602001826101a00151815250915050919050565b6060611b077f0000000000000000000000000000000000000000000000000000000000000000613601565b905090565b5f81815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b0390811696840196909652600184015480821695840195909552938190049094166060808301919091526002830154938416608083015293830463ffffffff1660a0820152600160c01b830461ffff1660c08201529293929160e0830190600160d01b900460ff166003811115611bbd57611bbd61474e565b6003811115611bce57611bce61474e565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b03169684019690965260048901549586169383019390935260609687019691959094918601939290910490911690811115611c6c57611c6c61474e565b6002811115611c7d57611c7d61474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff166001811115611cbe57611cbe61474e565b6001811115611ccf57611ccf61474e565b8152602001600182018054611ce390614ea7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0f90614ea7565b8015611d5a5780601f10611d3157610100808354040283529160200191611d5a565b820191905f5260205f20905b815481529060010190602001808311611d3d57829003601f168201915b5050505050815250508152602001600582018054611d7790614ea7565b80601f0160208091040260200160405190810160405280929190818152602001828054611da390614ea7565b8015611dee5780601f10611dc557610100808354040283529160200191611dee565b820191905f5260205f20905b815481529060010190602001808311611dd157829003601f168201915b5050505050815250508152602001600982018054611e0b90614ea7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e3790614ea7565b8015611e825780601f10611e5957610100808354040283529160200191611e82565b820191905f5260205f20905b815481529060010190602001808311611e6557829003601f168201915b50505050508152602001600a82018054611e9b90614ea7565b80601f0160208091040260200160405190810160405280929190818152602001828054611ec790614ea7565b8015611f125780601f10611ee957610100808354040283529160200191611f12565b820191905f5260205f20905b815481529060010190602001808311611ef557829003601f168201915b50505050508152602001600b82018054611f2b90614ea7565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5790614ea7565b8015611fa25780601f10611f7957610100808354040283529160200191611fa2565b820191905f5260205f20905b815481529060010190602001808311611f8557829003601f168201915b50505050508152505090505f611fb7826133a9565b90506002816003811115611fcd57611fcd61474e565b146002829091611ffb57604051634091b18960e11b8152600401611ff29291906151a0565b60405180910390fd5b5050506101a0015192915050565b612011613404565b6112f58161363e565b6120226140c4565b609a5f61202e84613186565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff16600281111561209c5761209c61474e565b60028111156120ad576120ad61474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156120ee576120ee61474e565b60018111156120ff576120ff61474e565b815260200160018201805461211390614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461213f90614ea7565b801561218a5780601f106121615761010080835404028352916020019161218a565b820191905f5260205f20905b81548152906001019060200180831161216d57829003601f168201915b50505050508152505081526020016005820180546121a790614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546121d390614ea7565b801561221e5780601f106121f55761010080835404028352916020019161221e565b820191905f5260205f20905b81548152906001019060200180831161220157829003601f168201915b5050505050815250509050919050565b5f54610100900460ff161580801561224c57505f54600160ff909116105b806122655750303b15801561226557505f5460ff166001145b6122c85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611ff2565b5f805460ff1916600117905580156122e9575f805461ff0019166101001790555b6122f16136b8565b6122f96136e6565b61230284613714565b61230b8361345e565b6123148261363e565b8015612359575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b612367613404565b6123705f613714565b565b61237a61312d565b5f83815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c0840152929161281e91849060e0830190600160d01b900460ff16600381111561242b5761242b61474e565b600381111561243c5761243c61474e565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b031696840196909652600489015495861693830193909352606096870196919590949186019392909104909116908111156124da576124da61474e565b60028111156124eb576124eb61474e565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff16600181111561252c5761252c61474e565b600181111561253d5761253d61474e565b815260200160018201805461255190614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461257d90614ea7565b80156125c85780601f1061259f576101008083540402835291602001916125c8565b820191905f5260205f20905b8154815290600101906020018083116125ab57829003601f168201915b50505050508152505081526020016005820180546125e590614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461261190614ea7565b801561265c5780601f106126335761010080835404028352916020019161265c565b820191905f5260205f20905b81548152906001019060200180831161263f57829003601f168201915b505050505081525050815260200160098201805461267990614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546126a590614ea7565b80156126f05780601f106126c7576101008083540402835291602001916126f0565b820191905f5260205f20905b8154815290600101906020018083116126d357829003601f168201915b50505050508152602001600a8201805461270990614ea7565b80601f016020809104026020016040519081016040528092919081815260200182805461273590614ea7565b80156127805780601f1061275757610100808354040283529160200191612780565b820191905f5260205f20905b81548152906001019060200180831161276357829003601f168201915b50505050508152602001600b8201805461279990614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546127c590614ea7565b80156128105780601f106127e757610100808354040283529160200191612810565b820191905f5260205f20905b8154815290600101906020018083116127f357829003601f168201915b5050505050815250506133a9565b905060018160038111156128345761283461474e565b14600182909161285957604051634091b18960e11b8152600401611ff29291906151a0565b50508154600160a01b90046001600160601b0316421161288c5760405163015a4b7560e51b815260040160405180910390fd5b600382015460405163ba33565d60e01b81526001600160a01b039091169063ba33565d906128c49033908990899089906004016151bb565b5f6040518083038186803b1580156128da575f5ffd5b505afa1580156128ec573d5f5f3e3d5ffd5b50506040805180820182526001808701546001600160a01b03168252600287015463ffffffff600160a01b9182900416602084015260048801548451808601909552600689018054949750612a28965060ff929091048216949390928492919091169081111561295e5761295e61474e565b600181111561296f5761296f61474e565b815260200160018201805461298390614ea7565b80601f01602080910402602001604051908101604052809291908181526020018280546129af90614ea7565b80156129fa5780601f106129d1576101008083540402835291602001916129fa565b820191905f5260205f20905b8154815290600101906020018083116129dd57829003601f168201915b5050509190925250505060028601548490600160e01b900463ffffffff16612a228b8a6112b1565b8a613765565b60028301805460ff60d01b1916600160d11b179055600a8301612a4b8682615075565b50600b8301612a5a8582615075565b5060048301546001600160a01b031615801590612a8a57506001830154600160a01b90046001600160601b031615155b15612b7957600283015460018401545f91612ad99161271091612aca91600160c01b90910461ffff16906001600160601b03600160a01b909104166151f3565b612ad4919061520a565b6132cc565b90506001600160601b03811615612b1957609b546004850154612b19916001600160a01b039182169162010000909104166001600160601b038416613b87565b60018401545f90612b3b908390600160a01b90046001600160601b0316615229565b90506001600160601b03811615612b765760058501546004860154612b76916001600160a01b0391821691166001600160601b038416613b87565b50505b6003830154604051637041233f60e11b8152336004820152602481018890526001600160a01b039091169063e082467e906044015f604051808303815f87803b158015612bc4575f5ffd5b505af1158015612bd6573d5f5f3e3d5ffd5b505050600184015460028501546040516001600160a01b039092169250889133917f659f23b2e7edf490e5fd6561c5148691ed0375ed7ddd3ab1bcfcfdbec4f209a991612c3b9163ffffffff600160a01b9091041690600a8a0190600b8b01906152c7565b60405180910390a450505061153e6001606555565b612c5861312d565b5f81815260986020526040902060028101546001600160a01b03163314612c92576040516370f43cb760e01b815260040160405180910390fd5b6002810154600160d81b900460ff1615612cbf57604051633e3d786960e01b815260040160405180910390fd5b604080516101c08101825282546001600160a01b038082168352600160a01b918290046001600160601b03908116602085015260018601548083169585019590955293829004909316606083015260028401549283166080830152820463ffffffff1660a0820152600160c01b820461ffff1660c08201525f91612d609190849060e0830190600160d01b900460ff16600381111561242b5761242b61474e565b90506003816003811115612d7657612d7661474e565b146003829091612d9b57604051634091b18960e11b8152600401611ff29291906151a0565b505060028201805460ff60d81b1916600160d81b17905560048201546001600160a01b031615801590612de157506001820154600160a01b90046001600160601b031615155b15612e1d57600282015460018301546004840154612e1d926001600160a01b0391821692911690600160a01b90046001600160601b0316613b87565b60028201546001830154604051600160a01b9091046001600160601b0316815284916001600160a01b0316907fe3ed40d31808582f7a92a30beacc0ec788d5091407ec6c10c1b999b3f317aea39060200160405180910390a350506112f56001606555565b612e8a613404565b6001600160a01b038116612eef5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611ff2565b6112f581613714565b612f01816131e9565b612f1e576040516314b0a41d60e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b031681602001516001600160601b03161115612f755760405163a7cf966560e01b815260040160405180910390fd5b612f828160a00151613bb7565b612f908282606001516134cf565b80609a5f612f9d85613186565b815260208082019290925260409081015f208351928401516001600160601b0316600160a01b9081026001600160a01b0394851617825591840151600182018054919094166001600160a01b03198216811785556060860151929492936001600160a81b0319909216179083600281111561301a5761301a61474e565b021790555060808201516002820180546001600160a01b0319166001600160a01b0390921691909117905560a08201518051600383018054909190829060ff19166001838181111561306e5761306e61474e565b0217905550602082015160018201906130879082615075565b50505060c0820151600582019061309e9082615075565b50905050816020015163ffffffff16825f01516001600160a01b0316336001600160a01b03167f7cd76abd4025a20959a1b20f7c1536e3894a0735cd8de0215dde803ddea7f2d2846040516130f39190614a9a565b60405180910390a460995f61310784613186565b815260208101919091526040015f205460ff1661312957613129826001613570565b5050565b60026065540361317f5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611ff2565b6002606555565b5f815f0151826020015163ffffffff166040516020016131d192919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526112de906152f7565b5f80826060015160028111156132015761320161474e565b14158015613218575081516001600160a01b031615155b80156112de575050602001516001600160601b0316151590565b5f60028260028111156132475761324761474e565b0361327357507f0000000000000000000000000000000000000000000000000000000000000000919050565b60018260028111156132875761328761474e565b036132b357507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b5f6001600160601b038211156133335760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401611ff2565b5090565b6040516001600160a01b03808516602483015283166044820152606481018290526123599085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613c76565b6001606555565b5f60018260e0015160038111156133c2576133c261474e565b1480156133ef57508161014001516020015182602001516133e3919061531a565b6001600160601b031642115b156133fc57506003919050565b5060e0015190565b6033546001600160a01b031633146123705760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611ff2565b61271061ffff8216111561348557604051630601f69760e01b815260040160405180910390fd5b609b805461ffff191661ffff83169081179091556040519081527f886b2cfcb151fd8b19ed902cc88f4a06dd9fe351a4a9ab93f33fe84abc157edf9060200160405180910390a150565b5f6134d982613232565b6040516304240c4960e51b815290915033906001600160a01b0383169063848189209061350a908790600401614efd565b602060405180830381865afa158015613525573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135499190615339565b6001600160a01b03161461153e576040516342ecfee960e11b815260040160405180910390fd5b8060995f61357d85613186565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550816020015163ffffffff16825f01516001600160a01b0316336001600160a01b03167f48b63f21a1eb9dd6880e196de6d7db3fbd0c282b74f1298dcb4cf53472298f39846040516135f5911515815260200190565b60405180910390a45050565b60605f61360d83613d49565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b03811661366557604051630863a45360e11b815260040160405180910390fd5b609b805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f262aa27c244f6f0088cb3092548a0adcaddedf459070a9ccab2dc6a07abe701d905f90a250565b5f54610100900460ff166136de5760405162461bcd60e51b8152600401611ff290615354565b612370613d70565b5f54610100900460ff1661370c5760405162461bcd60e51b8152600401611ff290615354565b612370613d9f565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f855160018111156137795761377961474e565b036139215760028660028111156137925761379261474e565b0361384f575f818060200190518101906137ac91906155ff565b90506137b9818585613dc5565b6040516280b71560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063080b71509061380690889085906004016156d1565b5f604051808303815f875af1158015613821573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261384891908101906156f0565b5050613b7f565b60018660028111156138635761386361474e565b036132b3575f8180602001905181019061387d9190615721565b905061388a818585613e4f565b6040516380c7d3f360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906380c7d3f3906138d8908890859060040161579a565b5f60405180830381865afa1580156138f2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613919919081019061581d565b505050613b7f565b6001855160018111156139365761393661474e565b03613b66575f85602001518060200190518101906139549190615876565b6040805160018082528183019092529192505f91906020808301908036833701905050905081815f8151811061398c5761398c615891565b61ffff909216602092830291909101909101525f60028960028111156139b4576139b461474e565b03613a72575f848060200190518101906139ce91906155ff565b90506139db818888613dc5565b604051625f5e5d60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d797490613a2a908b90859088906004016158e3565b6020604051808303815f875af1158015613a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a6a9190615914565b915050613b48565b6001896002811115613a8657613a8661474e565b036132b3575f84806020019051810190613aa09190615721565b9050613aad818888613e4f565b604051630606d12160e51b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c0da242090613afd908b908590889060040161592f565b5f60405180830381865afa158015613b17573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613b3e919081019061594e565b509150613b489050565b80613919576040516359fa4a9360e01b815260040160405180910390fd5b6040516347d3772160e11b815260040160405180910390fd5b505050505050565b6040516001600160a01b03831660248201526044810182905261153e90849063a9059cbb60e01b9060640161336b565b5f81516001811115613bcb57613bcb61474e565b03613bf457602081015151156112f557604051631501e04760e21b815260040160405180910390fd5b600181516001811115613c0957613c0961474e565b03613b6657806020015151602014613c3457604051631501e04760e21b815260040160405180910390fd5b5f8160200151806020019051810190613c4d9190615876565b905061271061ffff8216111561312957604051631501e04760e21b815260040160405180910390fd5b5f613cca826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ec79092919063ffffffff16565b905080515f1480613cea575080806020019051810190613cea9190615914565b61153e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611ff2565b5f60ff8216601f8111156112de57604051632cd44ac360e21b815260040160405180910390fd5b5f54610100900460ff16613d965760405162461bcd60e51b8152600401611ff290615354565b61237033613714565b5f54610100900460ff166133a25760405162461bcd60e51b8152600401611ff290615354565b8163ffffffff16835f015163ffffffff1614613df457604051634534032960e01b815260040160405180910390fd5b80836020015114613e1857604051638b56642d60e01b815260040160405180910390fd5b604083015151158015613e315750604083015160200151155b1561153e57604051637a8a1dbd60e11b815260040160405180910390fd5b8163ffffffff16835f015163ffffffff1614613e7e57604051634534032960e01b815260040160405180910390fd5b80836020015114613ea257604051638b56642d60e01b815260040160405180910390fd5b5f8360400151511161153e57604051637a8a1dbd60e11b815260040160405180910390fd5b6060613ed584845f85613edd565b949350505050565b606082471015613f3e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611ff2565b5f5f866001600160a01b03168587604051613f599190615985565b5f6040518083038185875af1925050503d805f8114613f93576040519150601f19603f3d011682016040523d82523d5f602084013e613f98565b606091505b5091509150613fa987838387613fb4565b979650505050505050565b606083156140225782515f0361401b576001600160a01b0385163b61401b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611ff2565b5081613ed5565b613ed583838151156140375781518083602001fd5b8060405162461bcd60e51b8152600401611ff29190614326565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082019081525f6020820181905260408201526060016140a96140c4565b81526020016060815260200160608152602001606081525090565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f60208201526040016140f8614105565b8152602001606081525090565b60408051808201909152805f6140f8565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561414c5761414c614116565b60405290565b604080519081016001600160401b038111828210171561414c5761414c614116565b60405160a081016001600160401b038111828210171561414c5761414c614116565b60405160e081016001600160401b038111828210171561414c5761414c614116565b604051601f8201601f191681016001600160401b03811182821017156141e0576141e0614116565b604052919050565b63ffffffff811681146112f5575f5ffd5b5f6001600160401b0382111561421157614211614116565b50601f01601f191660200190565b5f82601f83011261422e575f5ffd5b813561424161423c826141f9565b6141b8565b818152846020838601011115614255575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215614281575f5ffd5b81356001600160401b03811115614296575f5ffd5b8201606081850312156142a7575f5ffd5b6142af61412a565b81356142ba816141e8565b81526020828101359082015260408201356001600160401b038111156142de575f5ffd5b6142ea8682850161421f565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112aa60208301846142f8565b5f60408284031215614348575f5ffd5b614350614152565b823581526020928301359281019290925250919050565b5f82601f830112614376575f5ffd5b61438060406141b8565b806040840185811115614391575f5ffd5b845b818110156143ab578035845260209384019301614393565b509095945050505050565b5f6001600160401b038211156143ce576143ce614116565b5060051b60200190565b5f82601f8301126143e7575f5ffd5b81356143f561423c826143b6565b8082825260208201915060208360051b860101925085831115614416575f5ffd5b602085015b838110156145795780356001600160401b03811115614438575f5ffd5b86016060818903601f1901121561444d575f5ffd5b61445561412a565b6020820135614463816141e8565b815260408201356001600160401b0381111561447d575f5ffd5b61448c8a60208386010161421f565b60208301525060608201356001600160401b038111156144aa575f5ffd5b6020818401019250506060828a0312156144c2575f5ffd5b6144ca614152565b6144d48a84614338565b815260408301356001600160401b038111156144ee575f5ffd5b80840193505089601f840112614502575f5ffd5b823561451061423c826143b6565b8082825260208201915060208360051b87010192508c831115614531575f5ffd5b6020860195505b82861015614553578535825260209586019590910190614538565b80602085015250505080604083015250808552505060208301925060208101905061441b565b5095945050505050565b5f60208284031215614593575f5ffd5b81356001600160401b038111156145a8575f5ffd5b82018084036101208112156145bb575f5ffd5b6145c3614174565b82356145ce816141e8565b8152602083810135908201526145e78660408501614338565b60408201526080607f19830112156145fd575f5ffd5b614605614152565b91506146148660808501614367565b82526146238660c08501614367565b602083015281606082015261010083013591506001600160401b03821115614649575f5ffd5b614655868385016143d8565b608082015295945050505050565b6001600160a01b03811681146112f5575f5ffd5b8035610e0081614663565b5f60408284031215614692575f5ffd5b61469a614152565b905081356146a781614663565b815260208201356146b7816141e8565b602082015292915050565b5f602082840312156146d2575f5ffd5b81356001600160401b038111156146e7575f5ffd5b8201608081850312156146f8575f5ffd5b61470061412a565b813561470b81614663565b815261471a8560208401614682565b602082015260608201356001600160401b038111156142de575f5ffd5b5f60208284031215614747575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b600481106147725761477261474e565b9052565b602081016112de8284614762565b5f5f60408385031215614795575f5ffd5b8235915060208301356001600160401b038111156147b1575f5ffd5b6147bd8582860161421f565b9150509250929050565b61ffff811681146112f5575f5ffd5b5f602082840312156147e6575f5ffd5b81356112aa816147c7565b80151581146112f5575f5ffd5b5f5f6060838503121561480f575f5ffd5b6148198484614682565b91506040830135614829816147f1565b809150509250929050565b600381106147725761477261474e565b5f8151600281106148575761485761474e565b80845250602082015160406020850152613ed560408501826142f8565b80516001600160a01b031682526020808201516001600160601b0316908301526040808201515f916148b0908501826001600160a01b03169052565b5060608201516148c36060850182614834565b5060808201516148de60808501826001600160a01b03169052565b5060a082015160e060a08501526148f860e0850182614844565b905060c083015184820360c086015261491182826142f8565b95945050505050565b602081526149346020820183516001600160a01b03169052565b5f602083015161494f60408401826001600160601b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160601b03811660808401525060808301516001600160a01b03811660a08401525060a083015163ffffffff811660c08401525060c083015161ffff811660e08401525060e08301516149c4610100840182614762565b506101008301518015156101208401525061012083015163ffffffff8116610140840152506101408301516101c0610160840152614a066101e0840182614874565b9050610160840151601f1984830301610180850152614a2582826142f8565b915050610180840151601f19848303016101a0850152614a4582826142f8565b9150506101a0840151601f19848303016101c085015261491182826142f8565b5f60208284031215614a75575f5ffd5b81356112aa81614663565b5f60408284031215614a90575f5ffd5b6112aa8383614682565b602081525f6112aa6020830184614874565b5f5f5f60608486031215614abe575f5ffd5b8335614ac981614663565b92506020840135614ad9816147c7565b91506040840135614ae981614663565b809150509250925092565b5f5f5f60608486031215614b06575f5ffd5b8335925060208401356001600160401b03811115614b22575f5ffd5b614b2e8682870161421f565b92505060408401356001600160401b03811115614b49575f5ffd5b614b558682870161421f565b9150509250925092565b6001600160601b03811681146112f5575f5ffd5b8035610e0081614b5f565b803560038110610e00575f5ffd5b5f60408284031215614b9c575f5ffd5b614ba4614152565b9050813560028110614bb4575f5ffd5b815260208201356001600160401b03811115614bce575f5ffd5b614bda8482850161421f565b60208301525092915050565b5f5f60608385031215614bf7575f5ffd5b614c018484614682565b915060408301356001600160401b03811115614c1b575f5ffd5b830160e08186031215614c2c575f5ffd5b614c34614196565b614c3d82614677565b8152614c4b60208301614b73565b6020820152614c5c60408301614677565b6040820152614c6d60608301614b7e565b6060820152614c7e60808301614677565b608082015260a08201356001600160401b03811115614c9b575f5ffd5b614ca787828501614b8c565b60a08301525060c08201356001600160401b03811115614cc5575f5ffd5b614cd18782850161421f565b60c08301525080925050509250929050565b63ffffffff8151168252602081015160208301525f604082015160606040850152613ed560608501826142f8565b602081525f6112aa6020830184614ce3565b805f5b6002811015612359578151845260209384019390910190600101614d26565b5f610120830163ffffffff8351168452602083015160208501526040830151614d7b604086018280518252602090810151910152565b506060830151614d8f608086018251614d23565b60200151614da060c0860182614d23565b506080830151610120610100860152818151808452610140870191506101408160051b88010193506020830192505f5b81811015614e895761013f19888603018352835163ffffffff8151168652602081015160606020880152614e0760608801826142f8565b905060408201519150868103604088015260608101614e3182845180518252602090810151910152565b6020928301516060604084015280518083529301925f92608001905b80841015614e705784518252602082019150602085019450600184019350614e4d565b5097505050602094850194939093019250600101614dd0565b50929695505050505050565b602081525f6112aa6020830184614d45565b600181811c90821680614ebb57607f821691505b602082108103614ed957634e487b7160e01b5f52602260045260245ffd5b50919050565b80516001600160a01b0316825260209081015163ffffffff16910152565b604081016112de8284614edf565b5f60208284031215614f1b575f5ffd5b81516112aa816141e8565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff81811683821601908111156112de576112de614f26565b808201808211156112de576112de614f26565b80516001600160a01b031682526020808201515f91614f8a90850182614edf565b50604082015160806060850152613ed560808501826142f8565b6001600160a01b03831681526040602082018190525f90613ed590830184614f69565b602081525f6112aa6020830184614f69565b5f60208284031215614fe9575f5ffd5b81516112aa81614b5f565b84815260018060a01b0384166020820152826040820152608060608201525f6150206080830184614f69565b9695505050505050565b601f82111561153e57805f5260205f20601f840160051c8101602085101561504f5750805b601f840160051c820191505b8181101561506e575f815560010161505b565b5050505050565b81516001600160401b0381111561508e5761508e614116565b6150a28161509c8454614ea7565b8461502a565b6020601f8211600181146150d4575f83156150bd5750848201515b5f19600385901b1c1916600184901b17845561506e565b5f84815260208120601f198516915b8281101561510357878501518255602094850194600190920191016150e3565b508482101561512057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b63ffffffff8716815263ffffffff8616602082015260018060a01b03851660408201526001600160601b038416606082015282608082015260c060a08201525f61517c60c08301846142f8565b98975050505050505050565b828152604060208201525f613ed560408301846142f8565b604081016151ae8285614762565b6112aa6020830184614762565b60018060a01b0385168152836020820152608060408201525f6151e160808301856142f8565b8281036060840152613fa981856142f8565b80820281158282048414176112de576112de614f26565b5f8261522457634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160601b0382811682821603908111156112de576112de614f26565b5f815461525481614ea7565b80855260018216801561526e576001811461528a576152be565b60ff1983166020870152602082151560051b87010193506152be565b845f5260205f205f5b838110156152b55781546020828a010152600182019150602081019050615293565b87016020019450505b50505092915050565b63ffffffff84168152606060208201525f6152e56060830185615248565b82810360408401526150208185615248565b80516020808301519190811015614ed9575f1960209190910360031b1b16919050565b6001600160601b0381811683821601908111156112de576112de614f26565b5f60208284031215615349575f5ffd5b81516112aa81614663565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f604082840312156153af575f5ffd5b6153b7614152565b825181526020928301519281019290925250919050565b5f82601f8301126153dd575f5ffd5b6153e760406141b8565b8060408401858111156153f8575f5ffd5b845b818110156143ab5780518452602093840193016153fa565b5f82601f830112615421575f5ffd5b815161542f61423c826141f9565b818152846020838601011115615443575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f83011261546e575f5ffd5b815161547c61423c826143b6565b8082825260208201915060208360051b86010192508583111561549d575f5ffd5b602085015b838110156145795780518352602092830192016154a2565b5f82601f8301126154c9575f5ffd5b81516154d761423c826143b6565b8082825260208201915060208360051b8601019250858311156154f8575f5ffd5b602085015b838110156145795780516001600160401b0381111561551a575f5ffd5b86016060818903601f1901121561552f575f5ffd5b61553761412a565b6020820151615545816141e8565b815260408201516001600160401b0381111561555f575f5ffd5b61556e8a602083860101615412565b60208301525060608201516001600160401b0381111561558c575f5ffd5b6020818401019250506060828a0312156155a4575f5ffd5b6155ac614152565b6155b68a8461539f565b815260408301516001600160401b038111156155d0575f5ffd5b6155dc8b82860161545f565b6020830152508060408301525080855250506020830192506020810190506154fd565b5f6020828403121561560f575f5ffd5b81516001600160401b03811115615624575f5ffd5b8201808403610120811215615637575f5ffd5b61563f614174565b825161564a816141e8565b815260208381015190820152615663866040850161539f565b60408201526080607f1983011215615679575f5ffd5b615681614152565b915061569086608085016153ce565b825261569f8660c085016153ce565b602083015281606082015261010083015191506001600160401b038211156156c5575f5ffd5b614655868385016154ba565b6156db8184614edf565b606060408201525f613ed56060830184614d45565b5f60208284031215615700575f5ffd5b81516001600160401b03811115615715575f5ffd5b613ed58482850161545f565b5f60208284031215615731575f5ffd5b81516001600160401b03811115615746575f5ffd5b820160608185031215615757575f5ffd5b61575f61412a565b815161576a816141e8565b81526020828101519082015260408201516001600160401b0381111561578e575f5ffd5b6142ea86828501615412565b6157a48184614edf565b606060408201525f613ed56060830184614ce3565b5f82601f8301126157c8575f5ffd5b81516157d661423c826143b6565b8082825260208201915060208360051b8601019250858311156157f7575f5ffd5b602085015b8381101561457957805161580f81614663565b8352602092830192016157fc565b5f5f6040838503121561582e575f5ffd5b82516001600160401b03811115615843575f5ffd5b61584f8582860161545f565b92505060208301516001600160401b0381111561586a575f5ffd5b6147bd858286016157b9565b5f60208284031215615886575f5ffd5b81516112aa816147c7565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156158d957815161ffff168652602095860195909101906001016158b7565b5093949350505050565b6158ed8185614edf565b608060408201525f6159026080830185614d45565b828103606084015261502081856158a5565b5f60208284031215615924575f5ffd5b81516112aa816147f1565b6159398185614edf565b608060408201525f6159026080830185614ce3565b5f5f6040838503121561595f575f5ffd5b825161596a816147f1565b60208401519092506001600160401b0381111561586a575f5ffd5b5f82518060208501845e5f92019182525091905056fea264697066735822122087a33e96bb18d315da5eb2d201267bafd53f2ecbea51efb506024fee8eb59c7f64736f6c634300081b0033", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"_bn254CertificateVerifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_ecdsaCertificateVerifier\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_maxTaskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BN254_CERTIFICATE_VERIFIER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ECDSA_CERTIFICATE_VERIFIER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAX_TASK_SLA\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint96\",\"internalType\":\"uint96\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"createTask\",\"inputs\":[{\"name\":\"taskParams\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.TaskParams\",\"components\":[{\"name\":\"refundCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"executorOperatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"feeSplit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"feeSplitCollector\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getBN254CertificateBytes\",\"inputs\":[{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254Certificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"signature\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"apk\",\"type\":\"tuple\",\"internalType\":\"structBN254.G2Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"},{\"name\":\"Y\",\"type\":\"uint256[2]\",\"internalType\":\"uint256[2]\"}]},{\"name\":\"nonSignerWitnesses\",\"type\":\"tuple[]\",\"internalType\":\"structIBN254CertificateVerifierTypes.BN254OperatorInfoWitness[]\",\"components\":[{\"name\":\"operatorIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"operatorInfoProof\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"operatorInfo\",\"type\":\"tuple\",\"internalType\":\"structIOperatorTableCalculatorTypes.BN254OperatorInfo\",\"components\":[{\"name\":\"pubkey\",\"type\":\"tuple\",\"internalType\":\"structBN254.G1Point\",\"components\":[{\"name\":\"X\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"Y\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"name\":\"weights\",\"type\":\"uint256[]\",\"internalType\":\"uint256[]\"}]}]}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getECDSACertificateBytes\",\"inputs\":[{\"name\":\"cert\",\"type\":\"tuple\",\"internalType\":\"structIECDSACertificateVerifierTypes.ECDSACertificate\",\"components\":[{\"name\":\"referenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"messageHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"sig\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getExecutorOperatorSetTaskConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getMessageHash\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"getTaskInfo\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Task\",\"components\":[{\"name\":\"creator\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"creationTime\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"refundCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"},{\"name\":\"isFeeRefunded\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"operatorTableReferenceTimestamp\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"executorOperatorSetTaskConfig\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"payload\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTaskResult\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getTaskStatus\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"_feeSplitCollector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isExecutorOperatorSetRegistered\",\"inputs\":[{\"name\":\"operatorSetKey\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"isRegistered\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"refundFee\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registerExecutorOperatorSet\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"isRegistered\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setExecutorOperatorSetTaskConfig\",\"inputs\":[{\"name\":\"operatorSet\",\"type\":\"tuple\",\"internalType\":\"structOperatorSet\",\"components\":[{\"name\":\"avs\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"name\":\"config\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeSplit\",\"inputs\":[{\"name\":\"_feeSplit\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeeSplitCollector\",\"inputs\":[{\"name\":\"_feeSplitCollector\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitResult\",\"inputs\":[{\"name\":\"taskHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"event\",\"name\":\"ExecutorOperatorSetRegistered\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"isRegistered\",\"type\":\"bool\",\"indexed\":false,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ExecutorOperatorSetTaskConfigSet\",\"inputs\":[{\"name\":\"caller\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":true,\"internalType\":\"uint32\"},{\"name\":\"config\",\"type\":\"tuple\",\"indexed\":false,\"internalType\":\"structITaskMailboxTypes.ExecutorOperatorSetTaskConfig\",\"components\":[{\"name\":\"taskHook\",\"type\":\"address\",\"internalType\":\"contractIAVSTaskHook\"},{\"name\":\"taskSLA\",\"type\":\"uint96\",\"internalType\":\"uint96\"},{\"name\":\"feeToken\",\"type\":\"address\",\"internalType\":\"contractIERC20\"},{\"name\":\"curveType\",\"type\":\"uint8\",\"internalType\":\"enumIKeyRegistrarTypes.CurveType\"},{\"name\":\"feeCollector\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"consensus\",\"type\":\"tuple\",\"internalType\":\"structITaskMailboxTypes.Consensus\",\"components\":[{\"name\":\"consensusType\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.ConsensusType\"},{\"name\":\"value\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"name\":\"taskMetadata\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeRefunded\",\"inputs\":[{\"name\":\"refundCollector\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeSplitCollectorSet\",\"inputs\":[{\"name\":\"feeSplitCollector\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeeSplitSet\",\"inputs\":[{\"name\":\"feeSplit\",\"type\":\"uint16\",\"indexed\":false,\"internalType\":\"uint16\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"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\":\"TaskCreated\",\"inputs\":[{\"name\":\"creator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"operatorTableReferenceTimestamp\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"refundCollector\",\"type\":\"address\",\"indexed\":false,\"internalType\":\"address\"},{\"name\":\"avsFee\",\"type\":\"uint96\",\"indexed\":false,\"internalType\":\"uint96\"},{\"name\":\"taskDeadline\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"payload\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"TaskVerified\",\"inputs\":[{\"name\":\"aggregator\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"taskHash\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"avs\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"executorOperatorSetId\",\"type\":\"uint32\",\"indexed\":false,\"internalType\":\"uint32\"},{\"name\":\"executorCert\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"},{\"name\":\"result\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"CertificateStale\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"EmptyCertificateSignature\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutorOperatorSetNotRegistered\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ExecutorOperatorSetTaskConfigNotSet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"FeeAlreadyRefunded\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidAddressZero\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConsensusType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidConsensusValue\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCurveType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidFeeReceiver\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidFeeSplit\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMessageHash\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidOperatorSetOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidReferenceTimestamp\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTaskCreator\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidTaskStatus\",\"inputs\":[{\"name\":\"expected\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"},{\"name\":\"actual\",\"type\":\"uint8\",\"internalType\":\"enumITaskMailboxTypes.TaskStatus\"}]},{\"type\":\"error\",\"name\":\"OnlyRefundCollector\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PayloadIsEmpty\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TaskSLAExceedsMaximum\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ThresholdNotMet\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"TimestampAtCreation\",\"inputs\":[]}]", + Bin: "0x60e060405234801561000f575f5ffd5b50604051615afb380380615afb83398101604081905261002e91610135565b6001600160a01b03808416608052821660a0526001600160601b03811660c05261005661005e565b505050610185565b5f54610100900460ff16156100c95760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b5f5460ff90811614610118575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b0381168114610130575f5ffd5b919050565b5f5f5f60608486031215610147575f5ffd5b6101508461011a565b925061015e6020850161011a565b60408501519092506001600160601b038116811461017a575f5ffd5b809150509250925092565b60805160a05160c05161591b6101e05f395f81816103450152612ece01525f81816102650152818161323d015281816138120152613a3501525f81816103aa015281816131fd015281816137400152613962015261591b5ff3fe608060405234801561000f575f5ffd5b5060043610610153575f3560e01c8063678fbdb3116100bf578063b869416611610079578063b86941661461032d578063d3e043aa14610340578063f2fde38b1461037f578063f741e81a14610392578063f7424fc9146103a5578063fa2c0b37146103cc575f5ffd5b8063678fbdb3146102bb5780636bf6fad5146102ce578063708c0db9146102ee578063715018a6146103015780638da5cb5b14610309578063a5fabc811461031a575f5ffd5b8063468c07a011610110578063468c07a01461021857806349acd8841461022d5780634ad52e021461024057806354743ad21461026057806362fee037146102875780636373ea691461029a575f5ffd5b80631270a892146101575780631a20c505146101805780631ae370eb146101b15780631fb66f5d146101c45780632bf6cc79146101e557806337eaa10414610205575b5f5ffd5b61016a6101653660046141bb565b6103fe565b6040516101779190614270565b60405180910390f35b609b54610199906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610177565b61016a6101bf3660046144cd565b610427565b6101d76101d236600461460c565b61043a565b604051908152602001610177565b6101f86101f3366004614681565b610de3565b60405161017791906146c0565b6101d76102133660046146ce565b61128f565b61022b610226366004614720565b6112c2565b005b61022b61023b366004614748565b6112d6565b61025361024e366004614681565b611521565b6040516101779190614864565b6101997f000000000000000000000000000000000000000000000000000000000000000081565b61016a610295366004614681565b611aba565b609b546102a89061ffff1681565b60405161ffff9091168152602001610177565b61022b6102c93660046149af565b611fb7565b6102e16102dc3660046149ca565b611fc8565b60405161017791906149e4565b61022b6102fc3660046149f6565b6121dc565b61022b61230d565b6033546001600160a01b0316610199565b61022b610328366004614a3e565b612320565b61022b61033b366004614681565b612bfe565b6103677f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160601b039091168152602001610177565b61022b61038d3660046149af565b612e30565b61022b6103a0366004614b30565b612ea6565b6101997f000000000000000000000000000000000000000000000000000000000000000081565b6103ee6103da366004614681565b60996020525f908152604090205460ff1681565b6040519015158152602001610177565b6060816040516020016104119190614c5b565b6040516020818303038152906040529050919050565b6060816040516020016104119190614ddf565b5f6104436130db565b5f8260400151511161046857604051636b1a1b6960e11b815260040160405180910390fd5b60995f6104788460200151613134565b815260208101919091526040015f205460ff166104a85760405163c292b29760e01b815260040160405180910390fd5b5f609a5f6104b98560200151613134565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff16600281111561052757610527614698565b600281111561053857610538614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff16600181111561057957610579614698565b600181111561058a5761058a614698565b815260200160018201805461059e90614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546105ca90614df1565b80156106155780601f106105ec57610100808354040283529160200191610615565b820191905f5260205f20905b8154815290600101906020018083116105f857829003601f168201915b505050505081525050815260200160058201805461063290614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461065e90614df1565b80156106a95780601f10610680576101008083540402835291602001916106a9565b820191905f5260205f20905b81548152906001019060200180831161068c57829003601f168201915b50505050508152505090506106bd81613197565b6106da576040516314b0a41d60e11b815260040160405180910390fd5b5f6106e882606001516131e0565b90505f816001600160a01b0316635ddb9b5b86602001516040518263ffffffff1660e01b815260040161071b9190614e47565b602060405180830381865afa158015610736573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061075a9190614e55565b90505f826001600160a01b0316636141879e87602001516040518263ffffffff1660e01b815260040161078d9190614e47565b602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107cc9190614e55565b905063ffffffff8116158061080857506107e68183614e84565b63ffffffff1684602001516001600160601b0316426108059190614ea0565b11155b6108255760405163640fcd6b60e11b815260040160405180910390fd5b508251604051630a3fc61360e31b81526001600160a01b03909116906351fe3098906108579033908990600401614eee565b5f6040518083038186803b15801561086d575f5ffd5b505afa15801561087f573d5f5f3e3d5ffd5b50508451604051637036693f60e11b81525f93506001600160a01b03909116915063e06cd27e906108b4908990600401614f11565b602060405180830381865afa1580156108cf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f39190614f23565b90505f60975430468960405160200161090f9493929190614f3e565b60405160208183030381529060405280519060200120905060975460016109369190614ea0565b609755604080516101c08101909152338152602081016109554261327a565b6001600160601b03908116825260208a81018051516001600160a01b039081168386015292871660408501528b5190921660608401529051015163ffffffff166080820152609b5461ffff1660a082015260c001600181525f602080830182905263ffffffff80881660408086019190915260608086018c90528d8201516080808801919091528251808601845286815260a0808901919091528351808701855287815260c09889015289875260988652958390208851958901516001600160601b03908116600160a01b9081026001600160a01b03988916178355948a0151938a0151168402928616929092176001830155870151600282018054968901519789015161ffff16600160c01b0261ffff60c01b19989095169093026001600160c01b0319909616941693909317939093179384168117835560e0850151919391929160ff60d01b1990911662ffffff60c01b1990911617600160d01b836003811115610ac457610ac4614698565b02179055506101008201516002808301805461012086015163ffffffff16600160e01b026001600160e01b03941515600160d81b02949094166001600160d81b039091161792909217909155610140830151805160208201516001600160601b0316600160a01b9081026001600160a01b0392831617600386019081556040840151600487018054919094166001600160a01b031982168117855560608601519596929594936001600160a81b031990921617918490811115610b8957610b89614698565b021790555060808201516002820180546001600160a01b0319166001600160a01b0390921691909117905560a08201518051600383018054909190829060ff191660018381811115610bdd57610bdd614698565b021790555060208201516001820190610bf69082614fbf565b50505060c08201516005820190610c0d9082614fbf565b5050506101608201516009820190610c259082614fbf565b50610180820151600a820190610c3b9082614fbf565b506101a0820151600b820190610c519082614fbf565b50505060408501516001600160a01b031615801590610c7857505f826001600160601b0316115b15610cf35760808501516001600160a01b0316610ca857604051633480121760e21b815260040160405180910390fd5b86516001600160a01b0316610cd057604051633480121760e21b815260040160405180910390fd5b6040850151610cf3906001600160a01b031633306001600160601b0386166132e5565b8451604051629c5c4560e41b8152600481018390526001600160a01b03909116906309c5c450906024015f604051808303815f87803b158015610d34575f5ffd5b505af1158015610d46573d5f5f3e3d5ffd5b5050505086602001515f01516001600160a01b031681336001600160a01b03167f33add0b01e02278be5459fbfa3274aee699ec47f4ee7236b59e7a2c8b5000c268a6020015160200151878c5f0151888c602001516001600160601b031642610daf9190614ea0565b8f60400151604051610dc696959493929190615079565b60405180910390a4945050505050610dde6001606555565b919050565b5f81815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c084015283929160e0830190600160d01b900460ff166003811115610e8f57610e8f614698565b6003811115610ea057610ea0614698565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b03169684019690965260048901549586169383019390935260609687019691959094918601939290910490911690811115610f3e57610f3e614698565b6002811115610f4f57610f4f614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff166001811115610f9057610f90614698565b6001811115610fa157610fa1614698565b8152602001600182018054610fb590614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe190614df1565b801561102c5780601f106110035761010080835404028352916020019161102c565b820191905f5260205f20905b81548152906001019060200180831161100f57829003601f168201915b505050505081525050815260200160058201805461104990614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461107590614df1565b80156110c05780601f10611097576101008083540402835291602001916110c0565b820191905f5260205f20905b8154815290600101906020018083116110a357829003601f168201915b50505050508152505081526020016009820180546110dd90614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461110990614df1565b80156111545780601f1061112b57610100808354040283529160200191611154565b820191905f5260205f20905b81548152906001019060200180831161113757829003601f168201915b50505050508152602001600a8201805461116d90614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461119990614df1565b80156111e45780601f106111bb576101008083540402835291602001916111e4565b820191905f5260205f20905b8154815290600101906020018083116111c757829003601f168201915b50505050508152602001600b820180546111fd90614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461122990614df1565b80156112745780601f1061124b57610100808354040283529160200191611274565b820191905f5260205f20905b81548152906001019060200180831161125757829003601f168201915b505050505081525050905061128881613357565b9392505050565b5f82826040516020016112a39291906150d2565b6040516020818303038152906040528051906020012090505b92915050565b6112ca6133b2565b6112d38161340c565b50565b5f609a5f6112e385613134565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff16600281111561135157611351614698565b600281111561136257611362614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156113a3576113a3614698565b60018111156113b4576113b4614698565b81526020016001820180546113c890614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546113f490614df1565b801561143f5780601f106114165761010080835404028352916020019161143f565b820191905f5260205f20905b81548152906001019060200180831161142257829003601f168201915b505050505081525050815260200160058201805461145c90614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461148890614df1565b80156114d35780601f106114aa576101008083540402835291602001916114d3565b820191905f5260205f20905b8154815290600101906020018083116114b657829003601f168201915b50505050508152505090506114e781613197565b611504576040516314b0a41d60e11b815260040160405180910390fd5b61151283826060015161347d565b61151c838361351e565b505050565b611529613f9b565b5f82815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c08401529060e0830190600160d01b900460ff1660038111156115d3576115d3614698565b60038111156115e4576115e4614698565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b0316968401969096526004890154958616938301939093526060968701969195909491860193929091049091169081111561168257611682614698565b600281111561169357611693614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156116d4576116d4614698565b60018111156116e5576116e5614698565b81526020016001820180546116f990614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461172590614df1565b80156117705780601f1061174757610100808354040283529160200191611770565b820191905f5260205f20905b81548152906001019060200180831161175357829003601f168201915b505050505081525050815260200160058201805461178d90614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546117b990614df1565b80156118045780601f106117db57610100808354040283529160200191611804565b820191905f5260205f20905b8154815290600101906020018083116117e757829003601f168201915b505050505081525050815260200160098201805461182190614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461184d90614df1565b80156118985780601f1061186f57610100808354040283529160200191611898565b820191905f5260205f20905b81548152906001019060200180831161187b57829003601f168201915b50505050508152602001600a820180546118b190614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546118dd90614df1565b80156119285780601f106118ff57610100808354040283529160200191611928565b820191905f5260205f20905b81548152906001019060200180831161190b57829003601f168201915b50505050508152602001600b8201805461194190614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461196d90614df1565b80156119b85780601f1061198f576101008083540402835291602001916119b8565b820191905f5260205f20905b81548152906001019060200180831161199b57829003601f168201915b5050505050815250509050604051806101c00160405280825f01516001600160a01b0316815260200182602001516001600160601b0316815260200182604001516001600160a01b0316815260200182606001516001600160601b0316815260200182608001516001600160a01b031681526020018260a0015163ffffffff1681526020018260c0015161ffff168152602001611a5483613357565b6003811115611a6557611a65614698565b81526020018261010001511515815260200182610120015163ffffffff168152602001826101400151815260200182610160015181526020018261018001518152602001826101a00151815250915050919050565b5f81815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b0390811696840196909652600184015480821695840195909552938190049094166060808301919091526002830154938416608083015293830463ffffffff1660a0820152600160c01b830461ffff1660c08201529293929160e0830190600160d01b900460ff166003811115611b6b57611b6b614698565b6003811115611b7c57611b7c614698565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b03169684019690965260048901549586169383019390935260609687019691959094918601939290910490911690811115611c1a57611c1a614698565b6002811115611c2b57611c2b614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff166001811115611c6c57611c6c614698565b6001811115611c7d57611c7d614698565b8152602001600182018054611c9190614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054611cbd90614df1565b8015611d085780601f10611cdf57610100808354040283529160200191611d08565b820191905f5260205f20905b815481529060010190602001808311611ceb57829003601f168201915b5050505050815250508152602001600582018054611d2590614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5190614df1565b8015611d9c5780601f10611d7357610100808354040283529160200191611d9c565b820191905f5260205f20905b815481529060010190602001808311611d7f57829003601f168201915b5050505050815250508152602001600982018054611db990614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054611de590614df1565b8015611e305780601f10611e0757610100808354040283529160200191611e30565b820191905f5260205f20905b815481529060010190602001808311611e1357829003601f168201915b50505050508152602001600a82018054611e4990614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7590614df1565b8015611ec05780601f10611e9757610100808354040283529160200191611ec0565b820191905f5260205f20905b815481529060010190602001808311611ea357829003601f168201915b50505050508152602001600b82018054611ed990614df1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f0590614df1565b8015611f505780601f10611f2757610100808354040283529160200191611f50565b820191905f5260205f20905b815481529060010190602001808311611f3357829003601f168201915b50505050508152505090505f611f6582613357565b90506002816003811115611f7b57611f7b614698565b146002829091611fa957604051634091b18960e11b8152600401611fa09291906150ea565b60405180910390fd5b5050506101a0015192915050565b611fbf6133b2565b6112d3816135af565b611fd061400e565b609a5f611fdc84613134565b815260208082019290925260409081015f20815160e08101835281546001600160a01b038082168352600160a01b918290046001600160601b03169583019590955260018301549485169382019390935292909160608401910460ff16600281111561204a5761204a614698565b600281111561205b5761205b614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff16600181111561209c5761209c614698565b60018111156120ad576120ad614698565b81526020016001820180546120c190614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546120ed90614df1565b80156121385780601f1061210f57610100808354040283529160200191612138565b820191905f5260205f20905b81548152906001019060200180831161211b57829003601f168201915b505050505081525050815260200160058201805461215590614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461218190614df1565b80156121cc5780601f106121a3576101008083540402835291602001916121cc565b820191905f5260205f20905b8154815290600101906020018083116121af57829003601f168201915b5050505050815250509050919050565b5f54610100900460ff16158080156121fa57505f54600160ff909116105b806122135750303b15801561221357505f5460ff166001145b6122765760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611fa0565b5f805460ff191660011790558015612297575f805461ff0019166101001790555b61229f613629565b6122a7613657565b6122b084613685565b6122b98361340c565b6122c2826135af565b8015612307575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6123156133b2565b61231e5f613685565b565b6123286130db565b5f83815260986020908152604080832081516101c08101835281546001600160a01b038082168352600160a01b918290046001600160601b03908116968401969096526001840154808216958401959095529381900490941660608201526002820154928316608082015292820463ffffffff1660a0840152600160c01b820461ffff1660c084015292916127cc91849060e0830190600160d01b900460ff1660038111156123d9576123d9614698565b60038111156123ea576123ea614698565b8152600282810154600160d81b810460ff9081161515602080860191909152600160e01b90920463ffffffff16604080860191909152805160e0810182526003870180546001600160a01b038082168452600160a01b918290046001600160601b0316968401969096526004890154958616938301939093526060968701969195909491860193929091049091169081111561248857612488614698565b600281111561249957612499614698565b815260028201546001600160a01b0316602082015260408051808201825260038401805492909301929091829060ff1660018111156124da576124da614698565b60018111156124eb576124eb614698565b81526020016001820180546124ff90614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461252b90614df1565b80156125765780601f1061254d57610100808354040283529160200191612576565b820191905f5260205f20905b81548152906001019060200180831161255957829003601f168201915b505050505081525050815260200160058201805461259390614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546125bf90614df1565b801561260a5780601f106125e15761010080835404028352916020019161260a565b820191905f5260205f20905b8154815290600101906020018083116125ed57829003601f168201915b505050505081525050815260200160098201805461262790614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461265390614df1565b801561269e5780601f106126755761010080835404028352916020019161269e565b820191905f5260205f20905b81548152906001019060200180831161268157829003601f168201915b50505050508152602001600a820180546126b790614df1565b80601f01602080910402602001604051908101604052809291908181526020018280546126e390614df1565b801561272e5780601f106127055761010080835404028352916020019161272e565b820191905f5260205f20905b81548152906001019060200180831161271157829003601f168201915b50505050508152602001600b8201805461274790614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461277390614df1565b80156127be5780601f10612795576101008083540402835291602001916127be565b820191905f5260205f20905b8154815290600101906020018083116127a157829003601f168201915b505050505081525050613357565b905060018160038111156127e2576127e2614698565b14600182909161280757604051634091b18960e11b8152600401611fa09291906150ea565b50508154600160a01b90046001600160601b0316421161283a5760405163015a4b7560e51b815260040160405180910390fd5b600382015460405163ba33565d60e01b81526001600160a01b039091169063ba33565d90612872903390899089908990600401615105565b5f6040518083038186803b158015612888575f5ffd5b505afa15801561289a573d5f5f3e3d5ffd5b50506040805180820182526001808701546001600160a01b03168252600287015463ffffffff600160a01b91829004166020840152600488015484518086019095526006890180549497506129d6965060ff929091048216949390928492919091169081111561290c5761290c614698565b600181111561291d5761291d614698565b815260200160018201805461293190614df1565b80601f016020809104026020016040519081016040528092919081815260200182805461295d90614df1565b80156129a85780601f1061297f576101008083540402835291602001916129a8565b820191905f5260205f20905b81548152906001019060200180831161298b57829003601f168201915b5050509190925250505060028601548490600160e01b900463ffffffff166129d08b8a61128f565b8a6136d6565b60028301805460ff60d01b1916600160d11b179055600a83016129f98682614fbf565b50600b8301612a088582614fbf565b5060048301546001600160a01b031615801590612a3857506001830154600160a01b90046001600160601b031615155b15612b2757600283015460018401545f91612a879161271091612a7891600160c01b90910461ffff16906001600160601b03600160a01b9091041661513d565b612a829190615154565b61327a565b90506001600160601b03811615612ac757609b546004850154612ac7916001600160a01b039182169162010000909104166001600160601b038416613af8565b60018401545f90612ae9908390600160a01b90046001600160601b0316615173565b90506001600160601b03811615612b245760058501546004860154612b24916001600160a01b0391821691166001600160601b038416613af8565b50505b6003830154604051637041233f60e11b8152336004820152602481018890526001600160a01b039091169063e082467e906044015f604051808303815f87803b158015612b72575f5ffd5b505af1158015612b84573d5f5f3e3d5ffd5b505050600184015460028501546040516001600160a01b039092169250889133917f659f23b2e7edf490e5fd6561c5148691ed0375ed7ddd3ab1bcfcfdbec4f209a991612be99163ffffffff600160a01b9091041690600a8a0190600b8b0190615211565b60405180910390a450505061151c6001606555565b612c066130db565b5f81815260986020526040902060028101546001600160a01b03163314612c40576040516370f43cb760e01b815260040160405180910390fd5b6002810154600160d81b900460ff1615612c6d57604051633e3d786960e01b815260040160405180910390fd5b604080516101c08101825282546001600160a01b038082168352600160a01b918290046001600160601b03908116602085015260018601548083169585019590955293829004909316606083015260028401549283166080830152820463ffffffff1660a0820152600160c01b820461ffff1660c08201525f91612d0e9190849060e0830190600160d01b900460ff1660038111156123d9576123d9614698565b90506003816003811115612d2457612d24614698565b146003829091612d4957604051634091b18960e11b8152600401611fa09291906150ea565b505060028201805460ff60d81b1916600160d81b17905560048201546001600160a01b031615801590612d8f57506001820154600160a01b90046001600160601b031615155b15612dcb57600282015460018301546004840154612dcb926001600160a01b0391821692911690600160a01b90046001600160601b0316613af8565b60028201546001830154604051600160a01b9091046001600160601b0316815284916001600160a01b0316907fe3ed40d31808582f7a92a30beacc0ec788d5091407ec6c10c1b999b3f317aea39060200160405180910390a350506112d36001606555565b612e386133b2565b6001600160a01b038116612e9d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611fa0565b6112d381613685565b612eaf81613197565b612ecc576040516314b0a41d60e11b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160601b031681602001516001600160601b03161115612f235760405163a7cf966560e01b815260040160405180910390fd5b612f308160a00151613b28565b612f3e82826060015161347d565b80609a5f612f4b85613134565b815260208082019290925260409081015f208351928401516001600160601b0316600160a01b9081026001600160a01b0394851617825591840151600182018054919094166001600160a01b03198216811785556060860151929492936001600160a81b03199092161790836002811115612fc857612fc8614698565b021790555060808201516002820180546001600160a01b0319166001600160a01b0390921691909117905560a08201518051600383018054909190829060ff19166001838181111561301c5761301c614698565b0217905550602082015160018201906130359082614fbf565b50505060c0820151600582019061304c9082614fbf565b50905050816020015163ffffffff16825f01516001600160a01b0316336001600160a01b03167f7cd76abd4025a20959a1b20f7c1536e3894a0735cd8de0215dde803ddea7f2d2846040516130a191906149e4565b60405180910390a460995f6130b584613134565b815260208101919091526040015f205460ff166130d7576130d782600161351e565b5050565b60026065540361312d5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611fa0565b6002606555565b5f815f0151826020015163ffffffff1660405160200161317f92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b6040516020818303038152906040526112bc90615241565b5f80826060015160028111156131af576131af614698565b141580156131c6575081516001600160a01b031615155b80156112bc575050602001516001600160601b0316151590565b5f60028260028111156131f5576131f5614698565b0361322157507f0000000000000000000000000000000000000000000000000000000000000000919050565b600182600281111561323557613235614698565b0361326157507f0000000000000000000000000000000000000000000000000000000000000000919050565b60405163fdea7c0960e01b815260040160405180910390fd5b5f6001600160601b038211156132e15760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401611fa0565b5090565b6040516001600160a01b03808516602483015283166044820152606481018290526123079085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613be7565b6001606555565b5f60018260e00151600381111561337057613370614698565b14801561339d57508161014001516020015182602001516133919190615264565b6001600160601b031642115b156133aa57506003919050565b5060e0015190565b6033546001600160a01b0316331461231e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611fa0565b61271061ffff8216111561343357604051630601f69760e01b815260040160405180910390fd5b609b805461ffff191661ffff83169081179091556040519081527f886b2cfcb151fd8b19ed902cc88f4a06dd9fe351a4a9ab93f33fe84abc157edf9060200160405180910390a150565b5f613487826131e0565b6040516304240c4960e51b815290915033906001600160a01b038316906384818920906134b8908790600401614e47565b602060405180830381865afa1580156134d3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134f79190615283565b6001600160a01b03161461151c576040516342ecfee960e11b815260040160405180910390fd5b8060995f61352b85613134565b81526020019081526020015f205f6101000a81548160ff021916908315150217905550816020015163ffffffff16825f01516001600160a01b0316336001600160a01b03167f48b63f21a1eb9dd6880e196de6d7db3fbd0c282b74f1298dcb4cf53472298f39846040516135a3911515815260200190565b60405180910390a45050565b6001600160a01b0381166135d657604051630863a45360e11b815260040160405180910390fd5b609b805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517f262aa27c244f6f0088cb3092548a0adcaddedf459070a9ccab2dc6a07abe701d905f90a250565b5f54610100900460ff1661364f5760405162461bcd60e51b8152600401611fa09061529e565b61231e613cba565b5f54610100900460ff1661367d5760405162461bcd60e51b8152600401611fa09061529e565b61231e613ce9565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f855160018111156136ea576136ea614698565b0361389257600286600281111561370357613703614698565b036137c0575f8180602001905181019061371d9190615549565b905061372a818585613d0f565b6040516280b71560e41b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063080b715090613777908890859060040161561b565b5f604051808303815f875af1158015613792573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137b9919081019061563a565b5050613af0565b60018660028111156137d4576137d4614698565b03613261575f818060200190518101906137ee919061566b565b90506137fb818585613d99565b6040516380c7d3f360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906380c7d3f39061384990889085906004016156e4565b5f60405180830381865afa158015613863573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261388a9190810190615767565b505050613af0565b6001855160018111156138a7576138a7614698565b03613ad7575f85602001518060200190518101906138c591906157c0565b6040805160018082528183019092529192505f91906020808301908036833701905050905081815f815181106138fd576138fd6157db565b61ffff909216602092830291909101909101525f600289600281111561392557613925614698565b036139e3575f8480602001905181019061393f9190615549565b905061394c818888613d0f565b604051625f5e5d60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063017d79749061399b908b908590889060040161582d565b6020604051808303815f875af11580156139b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139db919061585e565b915050613ab9565b60018960028111156139f7576139f7614698565b03613261575f84806020019051810190613a11919061566b565b9050613a1e818888613d99565b604051630606d12160e51b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c0da242090613a6e908b9085908890600401615879565b5f60405180830381865afa158015613a88573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613aaf9190810190615898565b509150613ab99050565b8061388a576040516359fa4a9360e01b815260040160405180910390fd5b6040516347d3772160e11b815260040160405180910390fd5b505050505050565b6040516001600160a01b03831660248201526044810182905261151c90849063a9059cbb60e01b90606401613319565b5f81516001811115613b3c57613b3c614698565b03613b6557602081015151156112d357604051631501e04760e21b815260040160405180910390fd5b600181516001811115613b7a57613b7a614698565b03613ad757806020015151602014613ba557604051631501e04760e21b815260040160405180910390fd5b5f8160200151806020019051810190613bbe91906157c0565b905061271061ffff821611156130d757604051631501e04760e21b815260040160405180910390fd5b5f613c3b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613e119092919063ffffffff16565b905080515f1480613c5b575080806020019051810190613c5b919061585e565b61151c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611fa0565b5f54610100900460ff16613ce05760405162461bcd60e51b8152600401611fa09061529e565b61231e33613685565b5f54610100900460ff166133505760405162461bcd60e51b8152600401611fa09061529e565b8163ffffffff16835f015163ffffffff1614613d3e57604051634534032960e01b815260040160405180910390fd5b80836020015114613d6257604051638b56642d60e01b815260040160405180910390fd5b604083015151158015613d7b5750604083015160200151155b1561151c57604051637a8a1dbd60e11b815260040160405180910390fd5b8163ffffffff16835f015163ffffffff1614613dc857604051634534032960e01b815260040160405180910390fd5b80836020015114613dec57604051638b56642d60e01b815260040160405180910390fd5b5f8360400151511161151c57604051637a8a1dbd60e11b815260040160405180910390fd5b6060613e1f84845f85613e27565b949350505050565b606082471015613e885760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611fa0565b5f5f866001600160a01b03168587604051613ea391906158cf565b5f6040518083038185875af1925050503d805f8114613edd576040519150601f19603f3d011682016040523d82523d5f602084013e613ee2565b606091505b5091509150613ef387838387613efe565b979650505050505050565b60608315613f6c5782515f03613f65576001600160a01b0385163b613f655760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611fa0565b5081613e1f565b613e1f8383815115613f815781518083602001fd5b8060405162461bcd60e51b8152600401611fa09190614270565b604080516101c0810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c081018290529060e082019081525f602082018190526040820152606001613ff361400e565b81526020016060815260200160608152602001606081525090565b6040805160e0810182525f8082526020820181905291810182905290606082019081525f602082015260400161404261404f565b8152602001606081525090565b60408051808201909152805f614042565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561409657614096614060565b60405290565b604080519081016001600160401b038111828210171561409657614096614060565b60405160a081016001600160401b038111828210171561409657614096614060565b60405160e081016001600160401b038111828210171561409657614096614060565b604051601f8201601f191681016001600160401b038111828210171561412a5761412a614060565b604052919050565b63ffffffff811681146112d3575f5ffd5b5f6001600160401b0382111561415b5761415b614060565b50601f01601f191660200190565b5f82601f830112614178575f5ffd5b813561418b61418682614143565b614102565b81815284602083860101111561419f575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f602082840312156141cb575f5ffd5b81356001600160401b038111156141e0575f5ffd5b8201606081850312156141f1575f5ffd5b6141f9614074565b813561420481614132565b81526020828101359082015260408201356001600160401b03811115614228575f5ffd5b61423486828501614169565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112886020830184614242565b5f60408284031215614292575f5ffd5b61429a61409c565b823581526020928301359281019290925250919050565b5f82601f8301126142c0575f5ffd5b6142ca6040614102565b8060408401858111156142db575f5ffd5b845b818110156142f55780358452602093840193016142dd565b509095945050505050565b5f6001600160401b0382111561431857614318614060565b5060051b60200190565b5f82601f830112614331575f5ffd5b813561433f61418682614300565b8082825260208201915060208360051b860101925085831115614360575f5ffd5b602085015b838110156144c35780356001600160401b03811115614382575f5ffd5b86016060818903601f19011215614397575f5ffd5b61439f614074565b60208201356143ad81614132565b815260408201356001600160401b038111156143c7575f5ffd5b6143d68a602083860101614169565b60208301525060608201356001600160401b038111156143f4575f5ffd5b6020818401019250506060828a03121561440c575f5ffd5b61441461409c565b61441e8a84614282565b815260408301356001600160401b03811115614438575f5ffd5b80840193505089601f84011261444c575f5ffd5b823561445a61418682614300565b8082825260208201915060208360051b87010192508c83111561447b575f5ffd5b6020860195505b8286101561449d578535825260209586019590910190614482565b806020850152505050806040830152508085525050602083019250602081019050614365565b5095945050505050565b5f602082840312156144dd575f5ffd5b81356001600160401b038111156144f2575f5ffd5b8201808403610120811215614505575f5ffd5b61450d6140be565b823561451881614132565b8152602083810135908201526145318660408501614282565b60408201526080607f1983011215614547575f5ffd5b61454f61409c565b915061455e86608085016142b1565b825261456d8660c085016142b1565b602083015281606082015261010083013591506001600160401b03821115614593575f5ffd5b61459f86838501614322565b608082015295945050505050565b6001600160a01b03811681146112d3575f5ffd5b8035610dde816145ad565b5f604082840312156145dc575f5ffd5b6145e461409c565b905081356145f1816145ad565b8152602082013561460181614132565b602082015292915050565b5f6020828403121561461c575f5ffd5b81356001600160401b03811115614631575f5ffd5b820160808185031215614642575f5ffd5b61464a614074565b8135614655816145ad565b815261466485602084016145cc565b602082015260608201356001600160401b03811115614228575f5ffd5b5f60208284031215614691575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b600481106146bc576146bc614698565b9052565b602081016112bc82846146ac565b5f5f604083850312156146df575f5ffd5b8235915060208301356001600160401b038111156146fb575f5ffd5b61470785828601614169565b9150509250929050565b61ffff811681146112d3575f5ffd5b5f60208284031215614730575f5ffd5b813561128881614711565b80151581146112d3575f5ffd5b5f5f60608385031215614759575f5ffd5b61476384846145cc565b915060408301356147738161473b565b809150509250929050565b600381106146bc576146bc614698565b5f8151600281106147a1576147a1614698565b80845250602082015160406020850152613e1f6040850182614242565b80516001600160a01b031682526020808201516001600160601b0316908301526040808201515f916147fa908501826001600160a01b03169052565b50606082015161480d606085018261477e565b50608082015161482860808501826001600160a01b03169052565b5060a082015160e060a085015261484260e085018261478e565b905060c083015184820360c086015261485b8282614242565b95945050505050565b6020815261487e6020820183516001600160a01b03169052565b5f602083015161489960408401826001600160601b03169052565b5060408301516001600160a01b03811660608401525060608301516001600160601b03811660808401525060808301516001600160a01b03811660a08401525060a083015163ffffffff811660c08401525060c083015161ffff811660e08401525060e083015161490e6101008401826146ac565b506101008301518015156101208401525061012083015163ffffffff8116610140840152506101408301516101c06101608401526149506101e08401826147be565b9050610160840151601f198483030161018085015261496f8282614242565b915050610180840151601f19848303016101a085015261498f8282614242565b9150506101a0840151601f19848303016101c085015261485b8282614242565b5f602082840312156149bf575f5ffd5b8135611288816145ad565b5f604082840312156149da575f5ffd5b61128883836145cc565b602081525f61128860208301846147be565b5f5f5f60608486031215614a08575f5ffd5b8335614a13816145ad565b92506020840135614a2381614711565b91506040840135614a33816145ad565b809150509250925092565b5f5f5f60608486031215614a50575f5ffd5b8335925060208401356001600160401b03811115614a6c575f5ffd5b614a7886828701614169565b92505060408401356001600160401b03811115614a93575f5ffd5b614a9f86828701614169565b9150509250925092565b6001600160601b03811681146112d3575f5ffd5b8035610dde81614aa9565b803560038110610dde575f5ffd5b5f60408284031215614ae6575f5ffd5b614aee61409c565b9050813560028110614afe575f5ffd5b815260208201356001600160401b03811115614b18575f5ffd5b614b2484828501614169565b60208301525092915050565b5f5f60608385031215614b41575f5ffd5b614b4b84846145cc565b915060408301356001600160401b03811115614b65575f5ffd5b830160e08186031215614b76575f5ffd5b614b7e6140e0565b614b87826145c1565b8152614b9560208301614abd565b6020820152614ba6604083016145c1565b6040820152614bb760608301614ac8565b6060820152614bc8608083016145c1565b608082015260a08201356001600160401b03811115614be5575f5ffd5b614bf187828501614ad6565b60a08301525060c08201356001600160401b03811115614c0f575f5ffd5b614c1b87828501614169565b60c08301525080925050509250929050565b63ffffffff8151168252602081015160208301525f604082015160606040850152613e1f6060850182614242565b602081525f6112886020830184614c2d565b805f5b6002811015612307578151845260209384019390910190600101614c70565b5f610120830163ffffffff8351168452602083015160208501526040830151614cc5604086018280518252602090810151910152565b506060830151614cd9608086018251614c6d565b60200151614cea60c0860182614c6d565b506080830151610120610100860152818151808452610140870191506101408160051b88010193506020830192505f5b81811015614dd35761013f19888603018352835163ffffffff8151168652602081015160606020880152614d516060880182614242565b905060408201519150868103604088015260608101614d7b82845180518252602090810151910152565b6020928301516060604084015280518083529301925f92608001905b80841015614dba5784518252602082019150602085019450600184019350614d97565b5097505050602094850194939093019250600101614d1a565b50929695505050505050565b602081525f6112886020830184614c8f565b600181811c90821680614e0557607f821691505b602082108103614e2357634e487b7160e01b5f52602260045260245ffd5b50919050565b80516001600160a01b0316825260209081015163ffffffff16910152565b604081016112bc8284614e29565b5f60208284031215614e65575f5ffd5b815161128881614132565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff81811683821601908111156112bc576112bc614e70565b808201808211156112bc576112bc614e70565b80516001600160a01b031682526020808201515f91614ed490850182614e29565b50604082015160806060850152613e1f6080850182614242565b6001600160a01b03831681526040602082018190525f90613e1f90830184614eb3565b602081525f6112886020830184614eb3565b5f60208284031215614f33575f5ffd5b815161128881614aa9565b84815260018060a01b0384166020820152826040820152608060608201525f614f6a6080830184614eb3565b9695505050505050565b601f82111561151c57805f5260205f20601f840160051c81016020851015614f995750805b601f840160051c820191505b81811015614fb8575f8155600101614fa5565b5050505050565b81516001600160401b03811115614fd857614fd8614060565b614fec81614fe68454614df1565b84614f74565b6020601f82116001811461501e575f83156150075750848201515b5f19600385901b1c1916600184901b178455614fb8565b5f84815260208120601f198516915b8281101561504d578785015182556020948501946001909201910161502d565b508482101561506a57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b63ffffffff8716815263ffffffff8616602082015260018060a01b03851660408201526001600160601b038416606082015282608082015260c060a08201525f6150c660c0830184614242565b98975050505050505050565b828152604060208201525f613e1f6040830184614242565b604081016150f882856146ac565b61128860208301846146ac565b60018060a01b0385168152836020820152608060408201525f61512b6080830185614242565b8281036060840152613ef38185614242565b80820281158282048414176112bc576112bc614e70565b5f8261516e57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160601b0382811682821603908111156112bc576112bc614e70565b5f815461519e81614df1565b8085526001821680156151b857600181146151d457615208565b60ff1983166020870152602082151560051b8701019350615208565b845f5260205f205f5b838110156151ff5781546020828a0101526001820191506020810190506151dd565b87016020019450505b50505092915050565b63ffffffff84168152606060208201525f61522f6060830185615192565b8281036040840152614f6a8185615192565b80516020808301519190811015614e23575f1960209190910360031b1b16919050565b6001600160601b0381811683821601908111156112bc576112bc614e70565b5f60208284031215615293575f5ffd5b8151611288816145ad565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f604082840312156152f9575f5ffd5b61530161409c565b825181526020928301519281019290925250919050565b5f82601f830112615327575f5ffd5b6153316040614102565b806040840185811115615342575f5ffd5b845b818110156142f5578051845260209384019301615344565b5f82601f83011261536b575f5ffd5b815161537961418682614143565b81815284602083860101111561538d575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f82601f8301126153b8575f5ffd5b81516153c661418682614300565b8082825260208201915060208360051b8601019250858311156153e7575f5ffd5b602085015b838110156144c35780518352602092830192016153ec565b5f82601f830112615413575f5ffd5b815161542161418682614300565b8082825260208201915060208360051b860101925085831115615442575f5ffd5b602085015b838110156144c35780516001600160401b03811115615464575f5ffd5b86016060818903601f19011215615479575f5ffd5b615481614074565b602082015161548f81614132565b815260408201516001600160401b038111156154a9575f5ffd5b6154b88a60208386010161535c565b60208301525060608201516001600160401b038111156154d6575f5ffd5b6020818401019250506060828a0312156154ee575f5ffd5b6154f661409c565b6155008a846152e9565b815260408301516001600160401b0381111561551a575f5ffd5b6155268b8286016153a9565b602083015250806040830152508085525050602083019250602081019050615447565b5f60208284031215615559575f5ffd5b81516001600160401b0381111561556e575f5ffd5b8201808403610120811215615581575f5ffd5b6155896140be565b825161559481614132565b8152602083810151908201526155ad86604085016152e9565b60408201526080607f19830112156155c3575f5ffd5b6155cb61409c565b91506155da8660808501615318565b82526155e98660c08501615318565b602083015281606082015261010083015191506001600160401b0382111561560f575f5ffd5b61459f86838501615404565b6156258184614e29565b606060408201525f613e1f6060830184614c8f565b5f6020828403121561564a575f5ffd5b81516001600160401b0381111561565f575f5ffd5b613e1f848285016153a9565b5f6020828403121561567b575f5ffd5b81516001600160401b03811115615690575f5ffd5b8201606081850312156156a1575f5ffd5b6156a9614074565b81516156b481614132565b81526020828101519082015260408201516001600160401b038111156156d8575f5ffd5b6142348682850161535c565b6156ee8184614e29565b606060408201525f613e1f6060830184614c2d565b5f82601f830112615712575f5ffd5b815161572061418682614300565b8082825260208201915060208360051b860101925085831115615741575f5ffd5b602085015b838110156144c3578051615759816145ad565b835260209283019201615746565b5f5f60408385031215615778575f5ffd5b82516001600160401b0381111561578d575f5ffd5b615799858286016153a9565b92505060208301516001600160401b038111156157b4575f5ffd5b61470785828601615703565b5f602082840312156157d0575f5ffd5b815161128881614711565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b8281101561582357815161ffff16865260209586019590910190600101615801565b5093949350505050565b6158378185614e29565b608060408201525f61584c6080830185614c8f565b8281036060840152614f6a81856157ef565b5f6020828403121561586e575f5ffd5b81516112888161473b565b6158838185614e29565b608060408201525f61584c6080830185614c2d565b5f5f604083850312156158a9575f5ffd5b82516158b48161473b565b60208401519092506001600160401b038111156157b4575f5ffd5b5f82518060208501845e5f92019182525091905056fea2646970667358221220fc43bc7a63963e8e0e62261114c349f143c492fd1e9722c063db39d29089c3ca64736f6c634300081e0033", } // TaskMailboxABI is the input ABI used to generate the binding from. @@ -133,7 +133,7 @@ var TaskMailboxABI = TaskMailboxMetaData.ABI var TaskMailboxBin = TaskMailboxMetaData.Bin // DeployTaskMailbox deploys a new Ethereum contract, binding an instance of TaskMailbox to it. -func DeployTaskMailbox(auth *bind.TransactOpts, backend bind.ContractBackend, _bn254CertificateVerifier common.Address, _ecdsaCertificateVerifier common.Address, _maxTaskSLA *big.Int, _version string) (common.Address, *types.Transaction, *TaskMailbox, error) { +func DeployTaskMailbox(auth *bind.TransactOpts, backend bind.ContractBackend, _bn254CertificateVerifier common.Address, _ecdsaCertificateVerifier common.Address, _maxTaskSLA *big.Int) (common.Address, *types.Transaction, *TaskMailbox, error) { parsed, err := TaskMailboxMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -142,7 +142,7 @@ func DeployTaskMailbox(auth *bind.TransactOpts, backend bind.ContractBackend, _b return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TaskMailboxBin), backend, _bn254CertificateVerifier, _ecdsaCertificateVerifier, _maxTaskSLA, _version) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TaskMailboxBin), backend, _bn254CertificateVerifier, _ecdsaCertificateVerifier, _maxTaskSLA) if err != nil { return common.Address{}, nil, nil, err } @@ -725,37 +725,6 @@ func (_TaskMailbox *TaskMailboxCallerSession) Owner() (common.Address, error) { return _TaskMailbox.Contract.Owner(&_TaskMailbox.CallOpts) } -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_TaskMailbox *TaskMailboxCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _TaskMailbox.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_TaskMailbox *TaskMailboxSession) Version() (string, error) { - return _TaskMailbox.Contract.Version(&_TaskMailbox.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() view returns(string) -func (_TaskMailbox *TaskMailboxCallerSession) Version() (string, error) { - return _TaskMailbox.Contract.Version(&_TaskMailbox.CallOpts) -} - // CreateTask is a paid mutator transaction binding the contract method 0x1fb66f5d. // // Solidity: function createTask((address,(address,uint32),bytes) taskParams) returns(bytes32) diff --git a/script/deploy/devnet/deploy_from_scratch.s.sol b/script/deploy/devnet/deploy_from_scratch.s.sol index f196d06e9c..2769180f87 100644 --- a/script/deploy/devnet/deploy_from_scratch.s.sol +++ b/script/deploy/devnet/deploy_from_scratch.s.sol @@ -13,6 +13,7 @@ import "../../../src/contracts/core/DelegationManager.sol"; import "../../../src/contracts/core/AVSDirectory.sol"; import "../../../src/contracts/core/RewardsCoordinator.sol"; import "../../../src/contracts/core/AllocationManager.sol"; +import "../../../src/contracts/core/AllocationManagerView.sol"; import "../../../src/contracts/permissions/PermissionController.sol"; import "../../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; import "../../../src/contracts/strategies/StrategyFactory.sol"; @@ -60,6 +61,7 @@ contract DeployFromScratch is Script, Test { StrategyBase public baseStrategyImplementation; AllocationManager public allocationManagerImplementation; AllocationManager public allocationManager; + AllocationManagerView public allocationManagerView; PermissionController public permissionController; PermissionController public permissionControllerImplementation; @@ -211,6 +213,9 @@ contract DeployFromScratch is Script, Test { strategyFactory = StrategyFactory( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); + allocationManagerView = AllocationManagerView( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); permissionController = PermissionController( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); @@ -219,7 +224,7 @@ contract DeployFromScratch is Script, Test { if (chainId == 1) ethPOSDeposit = IETHPOSDeposit(0x00000000219ab540356cBB839Cbe05303d7705Fa); // if not on mainnet, deploy a mock else ethPOSDeposit = IETHPOSDeposit(stdJson.readAddress(config_data, ".ethPOSDepositAddress")); - eigenPodImplementation = new EigenPod(ethPOSDeposit, eigenPodManager, SEMVER); + eigenPodImplementation = new EigenPod(ethPOSDeposit, eigenPodManager); eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); @@ -228,43 +233,44 @@ contract DeployFromScratch is Script, Test { delegationImplementation = new DelegationManager( strategyManager, eigenPodManager, - allocationManager, + IAllocationManager(address(allocationManager)), eigenLayerPauserReg, permissionController, MIN_WITHDRAWAL_DELAY, SEMVER ); - strategyManagerImplementation = new StrategyManager(allocationManager, delegation, eigenLayerPauserReg, SEMVER); + strategyManagerImplementation = + new StrategyManager(IAllocationManager(address(allocationManager)), delegation, eigenLayerPauserReg, SEMVER); avsDirectoryImplementation = new AVSDirectory(delegation, eigenLayerPauserReg, SEMVER); eigenPodManagerImplementation = - new EigenPodManager(ethPOSDeposit, eigenPodBeacon, delegation, eigenLayerPauserReg, SEMVER); + new EigenPodManager(ethPOSDeposit, eigenPodBeacon, delegation, eigenLayerPauserReg); rewardsCoordinatorImplementation = new RewardsCoordinator( IRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams( delegation, strategyManager, - allocationManager, + IAllocationManager(address(allocationManager)), eigenLayerPauserReg, permissionController, REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS, REWARDS_COORDINATOR_MAX_REWARDS_DURATION, REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH, REWARDS_COORDINATOR_MAX_FUTURE_LENGTH, - REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, - SEMVER + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP ) ); allocationManagerImplementation = new AllocationManager( + allocationManagerView, delegation, eigenStrategy, eigenLayerPauserReg, permissionController, DEALLOCATION_DELAY, - ALLOCATION_CONFIGURATION_DELAY, - SEMVER + ALLOCATION_CONFIGURATION_DELAY ); - permissionControllerImplementation = new PermissionController(SEMVER); - strategyFactoryImplementation = new StrategyFactory(strategyManager, eigenLayerPauserReg, SEMVER); + + permissionControllerImplementation = new PermissionController(); + strategyFactoryImplementation = new StrategyFactory(strategyManager, eigenLayerPauserReg); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. { @@ -326,7 +332,7 @@ contract DeployFromScratch is Script, Test { // Deploy strategyFactory & base // Create base strategy implementation - baseStrategyImplementation = new StrategyBase(strategyManager, eigenLayerPauserReg, SEMVER); + baseStrategyImplementation = new StrategyBase(strategyManager, eigenLayerPauserReg); // Create a proxy beacon for base strategy implementation strategyBeacon = new UpgradeableBeacon(address(baseStrategyImplementation)); @@ -480,7 +486,7 @@ contract DeployFromScratch is Script, Test { "rewardsCoordinator: strategyManager address not set correctly" ); require( - delegationContract.allocationManager() == allocationManager, + delegationContract.allocationManager() == IAllocationManager(address(allocationManager)), "delegationManager: allocationManager address not set correctly" ); require( diff --git a/script/deploy/local/deploy_from_scratch.slashing.s.sol b/script/deploy/local/deploy_from_scratch.slashing.s.sol index 49022cdef1..53797d2754 100644 --- a/script/deploy/local/deploy_from_scratch.slashing.s.sol +++ b/script/deploy/local/deploy_from_scratch.slashing.s.sol @@ -14,6 +14,7 @@ import "../../../src/contracts/core/DelegationManager.sol"; import "../../../src/contracts/core/AVSDirectory.sol"; import "../../../src/contracts/core/RewardsCoordinator.sol"; import "../../../src/contracts/core/AllocationManager.sol"; +import "../../../src/contracts/core/AllocationManagerView.sol"; import "../../../src/contracts/permissions/PermissionController.sol"; import "../../../src/contracts/strategies/StrategyBaseTVLLimits.sol"; @@ -65,6 +66,7 @@ contract DeployFromScratch is Script, Test { StrategyBase public baseStrategyImplementation; AllocationManager public allocationManagerImplementation; AllocationManager public allocationManager; + AllocationManagerView public allocationManagerView; PermissionController public permissionControllerImplementation; PermissionController public permissionController; @@ -219,17 +221,20 @@ contract DeployFromScratch is Script, Test { allocationManager = AllocationManager( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); + allocationManagerView = AllocationManagerView( + address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) + ); permissionController = PermissionController( address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), "")) ); - eigenStrategy = IStrategy(new EigenStrategy(strategyManager, eigenLayerPauserReg, SEMVER)); + eigenStrategy = IStrategy(new EigenStrategy(strategyManager, eigenLayerPauserReg)); // if on mainnet, use the ETH2 deposit contract address if (chainId == 1) ethPOSDeposit = IETHPOSDeposit(0x00000000219ab540356cBB839Cbe05303d7705Fa); // if not on mainnet, deploy a mock else ethPOSDeposit = IETHPOSDeposit(stdJson.readAddress(config_data, ".ethPOSDepositAddress")); - eigenPodImplementation = new EigenPod(ethPOSDeposit, eigenPodManager, SEMVER); + eigenPodImplementation = new EigenPod(ethPOSDeposit, eigenPodManager); eigenPodBeacon = new UpgradeableBeacon(address(eigenPodImplementation)); @@ -238,41 +243,42 @@ contract DeployFromScratch is Script, Test { delegationImplementation = new DelegationManager( strategyManager, eigenPodManager, - allocationManager, + IAllocationManager(address(allocationManager)), eigenLayerPauserReg, permissionController, MIN_WITHDRAWAL_DELAY, SEMVER ); - strategyManagerImplementation = new StrategyManager(allocationManager, delegation, eigenLayerPauserReg, SEMVER); + strategyManagerImplementation = + new StrategyManager(IAllocationManager(address(allocationManager)), delegation, eigenLayerPauserReg, SEMVER); avsDirectoryImplementation = new AVSDirectory(delegation, eigenLayerPauserReg, SEMVER); eigenPodManagerImplementation = - new EigenPodManager(ethPOSDeposit, eigenPodBeacon, delegation, eigenLayerPauserReg, SEMVER); + new EigenPodManager(ethPOSDeposit, eigenPodBeacon, delegation, eigenLayerPauserReg); rewardsCoordinatorImplementation = new RewardsCoordinator( IRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams( delegation, strategyManager, - allocationManager, + IAllocationManager(address(allocationManager)), eigenLayerPauserReg, permissionController, REWARDS_COORDINATOR_CALCULATION_INTERVAL_SECONDS, REWARDS_COORDINATOR_MAX_REWARDS_DURATION, REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH, REWARDS_COORDINATOR_MAX_FUTURE_LENGTH, - REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, - SEMVER + REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP ) ); allocationManagerImplementation = new AllocationManager( + allocationManagerView, delegation, eigenStrategy, eigenLayerPauserReg, permissionController, DEALLOCATION_DELAY, - ALLOCATION_CONFIGURATION_DELAY, - SEMVER + ALLOCATION_CONFIGURATION_DELAY ); - permissionControllerImplementation = new PermissionController(SEMVER); + + permissionControllerImplementation = new PermissionController(); // Third, upgrade the proxy contracts to use the correct implementation contracts and initialize them. { @@ -340,7 +346,7 @@ contract DeployFromScratch is Script, Test { ); // deploy StrategyBaseTVLLimits contract implementation - baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager, eigenLayerPauserReg, SEMVER); + baseStrategyImplementation = new StrategyBaseTVLLimits(strategyManager, eigenLayerPauserReg); // create upgradeable proxies that each point to the implementation and initialize them for (uint256 i = 0; i < strategyConfigs.length; ++i) { if (strategyConfigs[i].tokenAddress == address(0)) { diff --git a/script/deploy/multichain/create_generator_config.s.sol b/script/deploy/multichain/create_generator_config.s.sol index 82cefc2075..bd6b0336f3 100644 --- a/script/deploy/multichain/create_generator_config.s.sol +++ b/script/deploy/multichain/create_generator_config.s.sol @@ -19,7 +19,7 @@ contract CreateGeneratorConfig is Script, Test { function run(string memory network, uint256 xCoord, uint256 yCoord) public { // Network must be preprod, testnet-sepolia, or mainnet require( - _strEq(network, "preprod") || _strEq(network, "testnet-sepolia") || _strEq(network, "mainnet"), + _strEq(network, "preprod-hoodi") || _strEq(network, "testnet-sepolia") || _strEq(network, "mainnet"), "Invalid network" ); diff --git a/script/deploy/multichain/deploy_generator.s.sol.sol b/script/deploy/multichain/deploy_generator.s.sol.sol index efbacddede..5f9176ef9f 100644 --- a/script/deploy/multichain/deploy_generator.s.sol.sol +++ b/script/deploy/multichain/deploy_generator.s.sol.sol @@ -26,7 +26,7 @@ contract DeployGenerator is Script, Test { * */ require( - _strEq(network, "preprod") || _strEq(network, "testnet-sepolia") || _strEq(network, "mainnet"), + _strEq(network, "preprod-hoodi") || _strEq(network, "testnet-sepolia") || _strEq(network, "mainnet"), "Invalid network" ); diff --git a/script/operations/update-generator/1-updateGenerator.s.sol b/script/operations/update-generator/1-updateGenerator.s.sol index 2d7fec2213..a7ff7a1e8e 100644 --- a/script/operations/update-generator/1-updateGenerator.s.sol +++ b/script/operations/update-generator/1-updateGenerator.s.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.12; import "../../releases/Env.sol"; +import "../../releases/TestUtils.sol"; import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; // Types @@ -17,6 +18,7 @@ import {stdToml} from "forge-std/StdToml.sol"; * Purpose: Update the generator on a PREPROD/TESTNET environment */ contract QueueTransferProxyAdmin is MultisigBuilder { + using TestUtils for *; using Env for *; using OperatorSetLib for OperatorSet; using stdToml for string; @@ -32,8 +34,8 @@ contract QueueTransferProxyAdmin is MultisigBuilder { function testScript() public virtual { // Require that the environment is a testnet environment supported by multichain require( - Env._strEq(Env.env(), "preprod") || Env._strEq(Env.env(), "testnet-sepolia") - || Env._strEq(Env.env(), "testnet-base-sepolia"), + TestUtils._strEq(Env.env(), "preprod-hoodi") || TestUtils._strEq(Env.env(), "testnet-sepolia") + || TestUtils._strEq(Env.env(), "testnet-base-sepolia"), "Environment must be a preprod/testnet environment" ); diff --git a/script/releases/CoreContractsDeployer.sol b/script/releases/CoreContractsDeployer.sol new file mode 100644 index 0000000000..6562ae8008 --- /dev/null +++ b/script/releases/CoreContractsDeployer.sol @@ -0,0 +1,223 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import "./Env.sol"; + +/** + * @title CoreContractsDeployer + * @notice Provides reusable helpers for deploying individual core contract implementations. + * Usage: + * ```solidity + * vm.startBroadcast(); + * deployPermissionController(); + * deployKeyRegistrar(); + * vm.stopBroadcast(); + * ``` + */ +abstract contract CoreContractsDeployer is EOADeployer { + using Env for *; + + /** + * permissions/ + */ + function deployPermissionController() internal onlyEOA returns (PermissionController deployed) { + deployed = new PermissionController(); + deployImpl({name: type(PermissionController).name, deployedTo: address(deployed)}); + } + + function deployKeyRegistrar() internal onlyEOA returns (KeyRegistrar deployed) { + deployed = new KeyRegistrar({ + _permissionController: Env.proxy.permissionController(), + _allocationManager: Env.proxy.allocationManager(), + _version: Env.deployVersion() + }); + deployImpl({name: type(KeyRegistrar).name, deployedTo: address(deployed)}); + } + + /** + * core/ + */ + function deployAllocationManagerView() internal onlyEOA returns (AllocationManagerView deployed) { + deployed = new AllocationManagerView({ + _delegation: Env.proxy.delegationManager(), + _eigenStrategy: Env.proxy.eigenStrategy(), + _DEALLOCATION_DELAY: Env.MIN_WITHDRAWAL_DELAY(), + _ALLOCATION_CONFIGURATION_DELAY: Env.ALLOCATION_CONFIGURATION_DELAY() + }); + deployImpl({name: type(AllocationManagerView).name, deployedTo: address(deployed)}); + } + + function deployAllocationManager() internal onlyEOA returns (AllocationManager deployed) { + deployed = new AllocationManager({ + _allocationManagerView: Env.impl.allocationManagerView(), + _delegation: Env.proxy.delegationManager(), + _eigenStrategy: Env.proxy.eigenStrategy(), + _pauserRegistry: Env.impl.pauserRegistry(), + _permissionController: Env.proxy.permissionController(), + _DEALLOCATION_DELAY: Env.MIN_WITHDRAWAL_DELAY(), + _ALLOCATION_CONFIGURATION_DELAY: Env.ALLOCATION_CONFIGURATION_DELAY() + }); + deployImpl({name: type(AllocationManager).name, deployedTo: address(deployed)}); + } + + function deployAVSDirectory() internal onlyEOA returns (AVSDirectory deployed) { + deployed = new AVSDirectory({ + _delegation: Env.proxy.delegationManager(), + _pauserRegistry: Env.impl.pauserRegistry(), + _version: Env.deployVersion() + }); + deployImpl({name: type(AVSDirectory).name, deployedTo: address(deployed)}); + } + + function deployDelegationManager() internal onlyEOA returns (DelegationManager deployed) { + deployed = new DelegationManager({ + _strategyManager: Env.proxy.strategyManager(), + _eigenPodManager: Env.proxy.eigenPodManager(), + _allocationManager: Env.proxy.allocationManager(), + _pauserRegistry: Env.impl.pauserRegistry(), + _permissionController: Env.proxy.permissionController(), + _MIN_WITHDRAWAL_DELAY: Env.MIN_WITHDRAWAL_DELAY(), + _version: Env.deployVersion() + }); + deployImpl({name: type(DelegationManager).name, deployedTo: address(deployed)}); + } + + function deployProtocolRegistry() internal onlyEOA returns (ProtocolRegistry deployed) { + deployed = new ProtocolRegistry(); + deployImpl({name: type(ProtocolRegistry).name, deployedTo: address(deployed)}); + } + + function deployReleaseManager() internal onlyEOA returns (ReleaseManager deployed) { + deployed = new ReleaseManager({_permissionController: Env.proxy.permissionController()}); + deployImpl({name: type(ReleaseManager).name, deployedTo: address(deployed)}); + } + + function deployRewardsCoordinator() internal onlyEOA returns (RewardsCoordinator deployed) { + deployed = new RewardsCoordinator({ + params: IRewardsCoordinatorTypes.RewardsCoordinatorConstructorParams({ + delegationManager: Env.proxy.delegationManager(), + strategyManager: Env.proxy.strategyManager(), + allocationManager: Env.proxy.allocationManager(), + pauserRegistry: Env.impl.pauserRegistry(), + permissionController: Env.proxy.permissionController(), + CALCULATION_INTERVAL_SECONDS: Env.CALCULATION_INTERVAL_SECONDS(), + MAX_REWARDS_DURATION: Env.MAX_REWARDS_DURATION(), + MAX_RETROACTIVE_LENGTH: Env.MAX_RETROACTIVE_LENGTH(), + MAX_FUTURE_LENGTH: Env.MAX_FUTURE_LENGTH(), + GENESIS_REWARDS_TIMESTAMP: Env.GENESIS_REWARDS_TIMESTAMP() + }) + }); + deployImpl({name: type(RewardsCoordinator).name, deployedTo: address(deployed)}); + } + + function deployStrategyManager() internal onlyEOA returns (StrategyManager deployed) { + deployed = new StrategyManager({ + _allocationManager: Env.proxy.allocationManager(), + _delegation: Env.proxy.delegationManager(), + _pauserRegistry: Env.impl.pauserRegistry(), + _version: Env.deployVersion() + }); + deployImpl({name: type(StrategyManager).name, deployedTo: address(deployed)}); + } + + /** + * pods/ + */ + function deployEigenPodManager() internal onlyEOA returns (EigenPodManager deployed) { + deployed = new EigenPodManager({ + _ethPOS: Env.ethPOS(), + _eigenPodBeacon: Env.beacon.eigenPod(), + _delegationManager: Env.proxy.delegationManager(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(EigenPodManager).name, deployedTo: address(deployed)}); + } + + function deployEigenPod() internal onlyEOA returns (EigenPod deployed) { + deployed = new EigenPod({_ethPOS: Env.ethPOS(), _eigenPodManager: Env.proxy.eigenPodManager()}); + deployImpl({name: type(EigenPod).name, deployedTo: address(deployed)}); + } + + /** + * strategies/ + */ + function deployEigenStrategy() internal onlyEOA returns (EigenStrategy deployed) { + deployed = new EigenStrategy({ + _strategyManager: Env.proxy.strategyManager(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(EigenStrategy).name, deployedTo: address(deployed)}); + } + + function deployStrategyBase() internal onlyEOA returns (StrategyBase deployed) { + deployed = new StrategyBase({ + _strategyManager: Env.proxy.strategyManager(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(StrategyBase).name, deployedTo: address(deployed)}); + } + + function deployStrategyBaseTVLLimits() internal onlyEOA returns (StrategyBaseTVLLimits deployed) { + deployed = new StrategyBaseTVLLimits({ + _strategyManager: Env.proxy.strategyManager(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(StrategyBaseTVLLimits).name, deployedTo: address(deployed)}); + } + + function deployStrategyFactory() internal onlyEOA returns (StrategyFactory deployed) { + deployed = new StrategyFactory({ + _strategyManager: Env.proxy.strategyManager(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(StrategyFactory).name, deployedTo: address(deployed)}); + } + + /** + * multichain/ + */ + function deployBN254CertificateVerifier() internal onlyEOA returns (BN254CertificateVerifier deployed) { + deployed = new BN254CertificateVerifier({_operatorTableUpdater: Env.proxy.operatorTableUpdater()}); + deployImpl({name: type(BN254CertificateVerifier).name, deployedTo: address(deployed)}); + } + + function deployCrossChainRegistry() internal onlyEOA returns (CrossChainRegistry deployed) { + deployed = new CrossChainRegistry({ + _allocationManager: Env.proxy.allocationManager(), + _keyRegistrar: Env.proxy.keyRegistrar(), + _permissionController: Env.proxy.permissionController(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(CrossChainRegistry).name, deployedTo: address(deployed)}); + } + + function deployECDSACertificateVerifier() internal onlyEOA returns (ECDSACertificateVerifier deployed) { + deployed = new ECDSACertificateVerifier({ + _operatorTableUpdater: Env.proxy.operatorTableUpdater(), + _version: Env.deployVersion() + }); + deployImpl({name: type(ECDSACertificateVerifier).name, deployedTo: address(deployed)}); + } + + function deployOperatorTableUpdater() internal onlyEOA returns (OperatorTableUpdater deployed) { + deployed = new OperatorTableUpdater({ + _bn254CertificateVerifier: Env.proxy.bn254CertificateVerifier(), + _ecdsaCertificateVerifier: Env.proxy.ecdsaCertificateVerifier(), + _pauserRegistry: Env.impl.pauserRegistry() + }); + deployImpl({name: type(OperatorTableUpdater).name, deployedTo: address(deployed)}); + } + + /** + * avs/ + */ + function deployTaskMailbox() internal onlyEOA returns (TaskMailbox deployed) { + deployed = new TaskMailbox({ + _bn254CertificateVerifier: address(Env.proxy.bn254CertificateVerifier()), + _ecdsaCertificateVerifier: address(Env.proxy.ecdsaCertificateVerifier()), + _maxTaskSLA: Env.MAX_TASK_SLA() + }); + deployImpl({name: type(TaskMailbox).name, deployedTo: address(deployed)}); + } +} diff --git a/script/releases/CoreUpgradeQueueBuilder.sol b/script/releases/CoreUpgradeQueueBuilder.sol new file mode 100644 index 0000000000..56d755a489 --- /dev/null +++ b/script/releases/CoreUpgradeQueueBuilder.sol @@ -0,0 +1,272 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "./Env.sol"; +import {Encode, MultisigCall} from "zeus-templates/utils/Encode.sol"; +import {IPausable} from "src/contracts/interfaces/IPausable.sol"; + +/** + * @title CoreUpgradeQueueBuilder + * @notice Provides reusable helpers for constructing multisig upgrade calls. + * Usage: + * ```solidity + * MultisigCall[] storage executorCalls = Encode.newMultisigCalls(); + * executorCalls.upgradeAVSDirectory(); + * ``` + */ +library CoreUpgradeQueueBuilder { + using Env for *; + using Encode for *; + using CoreUpgradeQueueBuilder for MultisigCall[]; + + /** + * permissions/ + */ + function upgradePermissionController( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.permissionController()), + impl: address(Env.impl.permissionController()) + }) + }); + } + + function upgradeKeyRegistrar( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.keyRegistrar()), + impl: address(Env.impl.keyRegistrar()) + }) + }); + } + + /** + * core/ + */ + function upgradeAllocationManager( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.allocationManager()), + impl: address(Env.impl.allocationManager()) + }) + }); + } + + function upgradeAVSDirectory( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.avsDirectory()), + impl: address(Env.impl.avsDirectory()) + }) + }); + } + + function upgradeDelegationManager( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.delegationManager()), + impl: address(Env.impl.delegationManager()) + }) + }); + } + + function upgradeProtocolRegistry( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.protocolRegistry()), + impl: address(Env.impl.protocolRegistry()) + }) + }); + } + + function upgradeReleaseManager( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.releaseManager()), + impl: address(Env.impl.releaseManager()) + }) + }); + } + + function upgradeRewardsCoordinator( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.rewardsCoordinator()), + impl: address(Env.impl.rewardsCoordinator()) + }) + }); + } + + function upgradeStrategyManager( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.strategyManager()), + impl: address(Env.impl.strategyManager()) + }) + }); + } + + /** + * pods/ + */ + function upgradeEigenPodManager( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.eigenPodManager()), + impl: address(Env.impl.eigenPodManager()) + }) + }); + } + + function upgradeEigenPod( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: address(Env.beacon.eigenPod()), + data: Encode.upgradeableBeacon.upgradeTo({newImpl: address(Env.impl.eigenPod())}) + }); + } + + /** + * strategies/ + */ + function upgradeEigenStrategy( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.eigenStrategy()), + impl: address(Env.impl.eigenStrategy()) + }) + }); + } + + function upgradeStrategyBase( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: address(Env.beacon.strategyBase()), + data: Encode.upgradeableBeacon.upgradeTo({newImpl: address(Env.impl.strategyBase())}) + }); + } + + function upgradeStrategyBaseTVLLimits( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + address proxyInstance = address(Env.instance.strategyBaseTVLLimits(i)); + calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({proxy: proxyInstance, impl: address(Env.impl.strategyBaseTVLLimits())}) + }); + } + return calls; + } + + function upgradeStrategyFactory( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.strategyFactory()), + impl: address(Env.impl.strategyFactory()) + }) + }); + } + + /** + * multichain/ + */ + function upgradeBN254CertificateVerifier( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.bn254CertificateVerifier()), + impl: address(Env.impl.bn254CertificateVerifier()) + }) + }); + } + + function upgradeCrossChainRegistry( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.crossChainRegistry()), + impl: address(Env.impl.crossChainRegistry()) + }) + }); + } + + function upgradeECDSACertificateVerifier( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.ecdsaCertificateVerifier()), + impl: address(Env.impl.ecdsaCertificateVerifier()) + }) + }); + } + + function upgradeOperatorTableUpdater( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({ + proxy: address(Env.proxy.operatorTableUpdater()), + impl: address(Env.impl.operatorTableUpdater()) + }) + }); + } + + /** + * avs/ + */ + function upgradeTaskMailbox( + MultisigCall[] storage calls + ) internal returns (MultisigCall[] storage) { + return calls.append({ + to: Env.proxyAdmin(), + data: Encode.proxyAdmin.upgrade({proxy: address(Env.proxy.taskMailbox()), impl: address(Env.impl.taskMailbox())}) + }); + } +} diff --git a/script/releases/CrosschainDeployLib.sol b/script/releases/CrosschainDeployLib.sol index 3050571cc8..b0f2233b99 100644 --- a/script/releases/CrosschainDeployLib.sol +++ b/script/releases/CrosschainDeployLib.sol @@ -2,9 +2,12 @@ pragma solidity ^0.8.12; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import "src/test/mocks/EmptyContract.sol"; +import "src/test/mocks/EmptyContract.sol"; +import "script/releases/Env.sol"; +import "script/releases/TestUtils.sol"; /// @dev https://github.com/pcaversaccio/createx/tree/main + ICreateX constant createx = ICreateX(0xba5Ed099633D3B313e4D5F7bdc1305d3c28ba5Ed); interface ICreateX { @@ -17,6 +20,32 @@ interface ICreateX { library CrosschainDeployLib { using CrosschainDeployLib for *; + using Env for *; + + /// @dev The creation code for the empty contract for production environments + /// @dev Originally, this code was deployed on every chain with a specific metadata hash. We want this to be consistent on all future deployments + /// @dev You can cross check the creation code here: https://etherscan.io/address/0x5b5e139f2d778e668932a6f3094aa172a862e61b#code + /// @dev The metadata hash should match if deployed from the `v1.8.1` tag + bytes constant EMPTY_CONTRACT_CREATION_CODE_PRODUCTION = + hex"6080604052348015600e575f5ffd5b50607380601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea2646970667358221220df965181609e9cc948c6b99afa4a77c354f5434931d54f2cc5d5561ba0ce83c664736f6c634300081b0033"; + + /// @dev The creation code for a proxy contract for production environments + /// @dev This code does not include the constructor arguments, which are encoded in the `computeUpgradeableProxyInitCode` function + /// @dev You can cross check the creation code here: https://etherscan.io/address/0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f#code + /// @dev The metadata hash should match if deployed from the `v1.8.1` tag + bytes constant PROXY_CONTRACT_CREATION_CODE_PRODUCTION = + hex"6080604052604051610d76380380610d76833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f516020610d2f5f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f8383604051806060016040528060278152602001610d4f60279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f516020610d2f5f395f51905f525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f5f856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156103d5575f5ffd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f5ffd5b8401601f81018613610417575f5ffd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610843806104ec5f395ff3fe60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fb069c0ac66c681da8d71466ef25a9eeb30abff8a031d0850877e6a7fa6454ec64736f6c634300081b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; + + /// @dev The creation code for the empty contract for preprod/testnet environments + /// @dev You can cross check the creation code here: https://sepolia.etherscan.io/address/0xa6192470D7D4c39f8F392167ADde283F60b34E15#code + bytes constant EMPTY_CONTRACT_CREATION_CODE_PREPROD_TESTNET = + hex"6080604052348015600e575f5ffd5b50607380601a5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c298557814602a575b5f5ffd5b5f60405190815260200160405180910390f3fea26469706673582212209418b3fed5398be22255b6d3eb5d6b8f62c4a07d850ec544a547026b380ff91d64736f6c634300081b0033"; + + /// @dev The creation code for a proxy contract for preprod/abitestnet environments. + /// @dev This code does not include the constructor arguments, which are encoded in the `computeUpgradeableProxyInitCode` function + /// @dev You can cross check the creation code here: https://sepolia.etherscan.io/address/0xB02A15c6Bd0882b35e9936A9579f35FB26E11476#code + bytes constant PROXY_CONTRACT_CREATION_CODE_PREPROD_TESTNET = + hex"6080604052604051610d76380380610d76833981016040819052610022916103c3565b828161002f82825f610043565b5061003b90508261006e565b5050506104df565b61004c836100db565b5f825111806100585750805b1561006957610067838361011a565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6100ad5f516020610d2f5f395f51905f52546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a16100d881610146565b50565b6100e4816101e1565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b606061013f8383604051806060016040528060278152602001610d4f60279139610275565b9392505050565b6001600160a01b0381166101b05760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b805f516020610d2f5f395f51905f525b80546001600160a01b0319166001600160a01b039290921691909117905550565b6001600160a01b0381163b61024e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016101a7565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101c0565b60605f5f856001600160a01b0316856040516102919190610494565b5f60405180830381855af49150503d805f81146102c9576040519150601f19603f3d011682016040523d82523d5f602084013e6102ce565b606091505b5090925090506102e0868383876102ea565b9695505050505050565b606083156103585782515f03610351576001600160a01b0385163b6103515760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101a7565b5081610362565b610362838361036a565b949350505050565b81511561037a5781518083602001fd5b8060405162461bcd60e51b81526004016101a791906104aa565b80516001600160a01b03811681146103aa575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156103d5575f5ffd5b6103de84610394565b92506103ec60208501610394565b60408501519092506001600160401b03811115610407575f5ffd5b8401601f81018613610417575f5ffd5b80516001600160401b03811115610430576104306103af565b604051601f8201601f19908116603f011681016001600160401b038111828210171561045e5761045e6103af565b604052818152828201602001881015610475575f5ffd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b610843806104ec5f395ff3fe60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205d4e17ffe6a54972b03f5d2bbd89c710a091ebdd0e3cea4e8770327f1c6dbf7e64736f6c634300081b0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564"; /// ----------------------------------------------------------------------- /// Write @@ -30,7 +59,15 @@ library CrosschainDeployLib { function deployEmptyContract( address deployer ) internal returns (address) { - return _deployCrosschain(deployer, type(EmptyContract).creationCode, type(EmptyContract).name); + bytes memory creationCode; + if (Env._isProductionEnvironment()) { + creationCode = EMPTY_CONTRACT_CREATION_CODE_PRODUCTION; + } else if (Env._isTestnetEnvironment()) { + creationCode = EMPTY_CONTRACT_CREATION_CODE_PREPROD_TESTNET; + } else { + revert("Invalid environment"); + } + return _deployCrosschain(deployer, creationCode, type(EmptyContract).name); } /* @@ -43,8 +80,8 @@ library CrosschainDeployLib { * @dev Example usage: * ```solidity * bytes11 salt = bytes11(uint88(0xffffffffffffffffffffff)); - * address emptyContract = type(EmptyContract).creationCode.deployCrosschain(deployer); - * address proxy = emptyContract.deployCrosschainProxy(deployer, salt); + * address emptyContract = crosschainDeployLib.deployEmptyContract(deployer); + * address proxy = crosschainDeployLib.deployCrosschainProxy(deployer, emptyContract, salt); * ITransparentUpgradeableProxy(address(proxy)).upgradeTo(address(implementation)); * ITransparentUpgradeableProxy(address(proxy)).changeAdmin(address(admin)); * ``` @@ -98,8 +135,17 @@ library CrosschainDeployLib { function computeUpgradeableProxyInitCode( address implementation, address admin - ) internal pure returns (bytes memory) { - return abi.encodePacked(type(TransparentUpgradeableProxy).creationCode, abi.encode(implementation, admin, "")); + ) internal view returns (bytes memory) { + bytes memory creationCode; + if (Env._isProductionEnvironment()) { + creationCode = PROXY_CONTRACT_CREATION_CODE_PRODUCTION; + } else if (Env._isTestnetEnvironment()) { + creationCode = PROXY_CONTRACT_CREATION_CODE_PREPROD_TESTNET; + } else { + revert("Invalid environment"); + } + // return creationCode; + return abi.encodePacked(creationCode, abi.encode(implementation, admin, "")); } /* diff --git a/script/releases/Env.sol b/script/releases/Env.sol index 7a5410c944..f36b7ae8e5 100644 --- a/script/releases/Env.sol +++ b/script/releases/Env.sol @@ -9,43 +9,60 @@ import "@openzeppelin/contracts/proxy/beacon/UpgradeableBeacon.sol"; import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -/// core/ +/** + * core/ + */ +import "src/contracts/core/AllocationManagerView.sol"; import "src/contracts/core/AllocationManager.sol"; +import "src/contracts/core/AllocationManagerView.sol"; import "src/contracts/core/AVSDirectory.sol"; import "src/contracts/core/DelegationManager.sol"; import "src/contracts/core/RewardsCoordinator.sol"; import "src/contracts/interfaces/IRewardsCoordinator.sol"; import "src/contracts/core/StrategyManager.sol"; import "src/contracts/core/ReleaseManager.sol"; +import "src/contracts/core/ProtocolRegistry.sol"; -/// permissions/ +/** + * pemissions/ + */ import "src/contracts/permissions/PauserRegistry.sol"; import "src/contracts/permissions/PermissionController.sol"; import "src/contracts/permissions/KeyRegistrar.sol"; -/// pods/ +/** + * pods/ + */ import "src/contracts/pods/EigenPod.sol"; import "src/contracts/pods/EigenPodManager.sol"; -/// strategies/ +/** + * strategies/ + */ import "src/contracts/strategies/EigenStrategy.sol"; import "src/contracts/strategies/StrategyBase.sol"; import "src/contracts/strategies/StrategyBaseTVLLimits.sol"; import "src/contracts/strategies/StrategyFactory.sol"; -/// token/ +/** + * token/ + */ import "src/contracts/interfaces/IEigen.sol"; import "src/contracts/interfaces/IBackingEigen.sol"; import "src/contracts/token/Eigen.sol"; import "src/contracts/token/BackingEigen.sol"; -/// multichain/ +/** + * multichain/ + */ import "src/contracts/multichain/CrossChainRegistry.sol"; import "src/contracts/multichain/OperatorTableUpdater.sol"; import "src/contracts/multichain/ECDSACertificateVerifier.sol"; import "src/contracts/multichain/BN254CertificateVerifier.sol"; -/// avs/ +/** + * avs/ + */ import "src/contracts/avs/task/TaskMailbox.sol"; // For destination chains @@ -216,6 +233,12 @@ library Env { return AllocationManager(_deployedImpl(type(AllocationManager).name)); } + function allocationManagerView( + DeployedImpl + ) internal view returns (AllocationManagerView) { + return AllocationManagerView(_deployedImpl(type(AllocationManagerView).name)); + } + function avsDirectory( DeployedProxy ) internal view returns (AVSDirectory) { @@ -276,6 +299,18 @@ library Env { return ReleaseManager(_deployedImpl(type(ReleaseManager).name)); } + function protocolRegistry( + DeployedProxy + ) internal view returns (ProtocolRegistry) { + return ProtocolRegistry(_deployedProxy(type(ProtocolRegistry).name)); + } + + function protocolRegistry( + DeployedImpl + ) internal view returns (ProtocolRegistry) { + return ProtocolRegistry(_deployedImpl(type(ProtocolRegistry).name)); + } + /** * permissions/ */ @@ -567,25 +602,76 @@ library Env { return vm.envString(key); } - /** - * Test Helpers - */ + function _strEq(string memory a, string memory b) internal pure returns (bool) { + return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); + } - /// @dev Query and return `proxyAdmin.getProxyImplementation(proxy)` - function _getProxyImpl( + /// @dev Use this function to get the proxy admin when it is not `Env.proxyAdmin()` + /// @dev `_getProxyAdmin` expects the caller to be the actual proxy admin + function getProxyAdminBySlot( address _proxy ) internal view returns (address) { - return ProxyAdmin(Env.proxyAdmin()).getProxyImplementation(ITransparentUpgradeableProxy(_proxy)); + // https://eips.ethereum.org/EIPS/eip-1967 + bytes32 adminSlot = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; + address admin = address(uint160(uint256(vm.load(address(_proxy), adminSlot)))); + return admin; } - /// @dev Query and return `proxyAdmin.getProxyAdmin(proxy)` - function _getProxyAdmin( - address _proxy - ) internal view returns (address) { - return ProxyAdmin(Env.proxyAdmin()).getProxyAdmin(ITransparentUpgradeableProxy(_proxy)); + /** + * + * Environment Type Helpers + * + */ + + /// Types that help facilitate network type differentation + /// @dev Mimics the deployment matrix in: https://github.com/Layr-Labs/eigenlayer-contracts?tab=readme-ov-file#deployments + function isCoreProtocolDeployed() internal view returns (bool) { + return _isMainnet() || _isSepolia() || _isHoodi() || _isPreprod(); } - function _strEq(string memory a, string memory b) internal pure returns (bool) { - return keccak256(bytes(a)) == keccak256(bytes(b)); + function supportsEigenPods() internal view returns (bool) { + return _isMainnet() || _isHoodi() || _isPreprod(); + } + + function isSource() internal view returns (bool) { + return _isMainnet() || _isSepolia() || _isPreprod(); + } + + function isDestination() internal view returns (bool) { + return _isMainnet() || _isBase() || _isSepolia() || _isBaseSepolia() || _isPreprod(); + } + + /// @dev Whether the environment is a testnet environment + function _isTestnetEnvironment() internal view returns (bool) { + return _isSepolia() || _isBaseSepolia() || _isHoodi() || _isPreprod(); + } + + /// @dev Whether the environment is a production environment with real funds + function _isProductionEnvironment() internal view returns (bool) { + return _isMainnet() || _isBase(); + } + + function _isMainnet() private view returns (bool) { + return _strEq(env(), "mainnet"); + } + + function _isBase() private view returns (bool) { + return _strEq(env(), "base"); + } + + function _isSepolia() private view returns (bool) { + return _strEq(env(), "testnet-sepolia"); + } + + function _isBaseSepolia() private view returns (bool) { + return _strEq(env(), "testnet-base-sepolia"); + } + + function _isHoodi() private view returns (bool) { + return _strEq(env(), "testnet-hoodi"); + } + + function _isPreprod() private view returns (bool) { + return _strEq(env(), "preprod-hoodi"); } } diff --git a/script/releases/TestUtils.sol b/script/releases/TestUtils.sol new file mode 100644 index 0000000000..73047431be --- /dev/null +++ b/script/releases/TestUtils.sol @@ -0,0 +1,1381 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "./Env.sol"; +import "forge-std/Vm.sol"; +import "src/contracts/mixins/SplitContractMixin.sol"; + +/// @notice Utility library for testing contract deployments +/// @dev This library exposes the following test functions: +/// @dev - validateProxyAdmins/validateDestinationProxyAdmins - Check that proxy admins are correctly set. +/// @dev - validateProxyConstructors/validateDestinationProxyConstructors - Check that proxy constructors are correctly set. +/// @dev - validateProxiesAlreadyInitialized/validateDestinationProxiesAlreadyInitialized - Check that proxies are already initialized. +/// @dev - validateProxyStorage/validateDestinationProxyStorage - Check that proxy storage is correctly set. +/// @dev - validateImplConstructors/validateDestinationImplConstructors - Check that implementation constructors are correctly set. +/// @dev - validateImplsNotInitializable/validateDestinationImplsNotInitializable - Check that implementation cannot be initialized. +/// @dev - validateImplAddressesMatchProxy/validateDestinationImplAddressesMatchProxy - Check that implementation addresses match the proxy admin's reported implementation address. +/// @dev - validateProtocolRegistry/validateDestinationProtocolRegistry - Check that the protocol version is correctly set. +library TestUtils { + using Env for *; + + bytes constant errInit = "Initializable: contract is already initialized"; + address internal constant VM_ADDRESS = address(uint160(uint256(keccak256("hevm cheat code")))); + Vm internal constant vm = Vm(VM_ADDRESS); + + /** + * + * PROXY ADMIN VALIDATION + * + */ + + /// @dev This function is run on *all* deployed contracts to ensure that the proxyAdmin is correctly set. + function validateProxyAdmins() internal view { + address pa = Env.proxyAdmin(); + /** + * pemissions/ + */ + assertTrue( + _getProxyAdmin(address(Env.proxy.permissionController())) == pa, "permissionController proxyAdmin incorrect" + ); + assertTrue(_getProxyAdmin(address(Env.proxy.keyRegistrar())) == pa, "keyRegistrar proxyAdmin incorrect"); + + /** + * core/ + */ + assertTrue( + _getProxyAdmin(address(Env.proxy.allocationManager())) == pa, "allocationManager proxyAdmin incorrect" + ); + assertTrue(_getProxyAdmin(address(Env.proxy.avsDirectory())) == pa, "avsDirectory proxyAdmin incorrect"); + assertTrue( + _getProxyAdmin(address(Env.proxy.delegationManager())) == pa, "delegationManager proxyAdmin incorrect" + ); + // Protocol registry tested in the `validateDestinationProxyAdmins` function + assertTrue(_getProxyAdmin(address(Env.proxy.releaseManager())) == pa, "releaseManager proxyAdmin incorrect"); + assertTrue( + _getProxyAdmin(address(Env.proxy.rewardsCoordinator())) == pa, "rewardsCoordinator proxyAdmin incorrect" + ); + assertTrue(_getProxyAdmin(address(Env.proxy.strategyManager())) == pa, "strategyManager proxyAdmin incorrect"); + + /** + * pods/ + */ + assertTrue(Env.beacon.eigenPod().owner() == Env.executorMultisig(), "eigenPod beacon owner incorrect"); + assertTrue(_getProxyAdmin(address(Env.proxy.eigenPodManager())) == pa, "eigenPodManager proxyAdmin incorrect"); + + /** + * strategies/ + */ + assertTrue(_getProxyAdmin(address(Env.proxy.eigenStrategy())) == pa, "eigenStrategy proxyAdmin incorrect"); + assertTrue(Env.beacon.strategyBase().owner() == Env.executorMultisig(), "strategyBase beacon owner incorrect"); + + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + assertTrue( + _getProxyAdmin(address(Env.instance.strategyBaseTVLLimits(i))) == pa, + "strategyBaseTVLLimits proxyAdmin incorrect" + ); + } + + assertTrue(_getProxyAdmin(address(Env.proxy.strategyFactory())) == pa, "strategyFactory proxyAdmin incorrect"); + + /** + * multichain/ + */ + assertTrue( + _getProxyAdmin(address(Env.proxy.crossChainRegistry())) == pa, "crossChainRegistry proxyAdmin incorrect" + ); + + validateDestinationProxyAdmins(); + } + + function validateDestinationProxyAdmins() internal view { + address pa = Env.proxyAdmin(); + /** + * core/ + */ + assertTrue(_getProxyAdmin(address(Env.proxy.protocolRegistry())) == pa, "protocolRegistry proxyAdmin incorrect"); + + /** + * multichain/ + */ + assertTrue( + _getProxyAdmin(address(Env.proxy.bn254CertificateVerifier())) == pa, + "bn254CertificateVerifier proxyAdmin incorrect" + ); + assertTrue( + _getProxyAdmin(address(Env.proxy.ecdsaCertificateVerifier())) == pa, + "ecdsaCertificateVerifier proxyAdmin incorrect" + ); + assertTrue( + _getProxyAdmin(address(Env.proxy.operatorTableUpdater())) == pa, "operatorTableUpdater proxyAdmin incorrect" + ); + + /** + * avs/ + */ + assertTrue(_getProxyAdmin(address(Env.proxy.taskMailbox())) == pa, "taskMailbox proxyAdmin incorrect"); + } + + /** + * + * PROXY VALIDATION + * + */ + + /// @dev Validate that the proxy constructors are correctly set + function validateProxyConstructors() internal view { + /** + * pemissions/ + */ + // PermissionController has no constructor + validateKeyRegistrarImmutables(Env.proxy.keyRegistrar()); + + /** + * core/ + */ + validateAllocationManagerImmutables(Env.proxy.allocationManager()); + validateAVSDirectoryImmutables(Env.proxy.avsDirectory()); + validateDelegationManagerImmutables(Env.proxy.delegationManager()); + // ProtocolRegistry has no constructor + validateReleaseManagerImmutables(Env.proxy.releaseManager()); + validateRewardsCoordinatorImmutables(Env.proxy.rewardsCoordinator()); + validateStrategyManagerImmutables(Env.proxy.strategyManager()); + + /** + * pods/ + */ + // EigenPod beacon doesn't have immutable, only implementation does + validateEigenPodManagerImmutables(Env.proxy.eigenPodManager()); + + /** + * strategies/ + */ + validateEigenStrategyImmutables(Env.proxy.eigenStrategy()); + // StrategyBase beacon doesn't have immutables, only implementation does + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + validateStrategyBaseTVLLimitsImmutables(Env.instance.strategyBaseTVLLimits(i)); + } + validateStrategyFactoryImmutables(Env.proxy.strategyFactory()); + + /** + * multichain/ + */ + validateCrossChainRegistryImmutables(Env.proxy.crossChainRegistry()); + + validateDestinationProxyConstructors(); + } + + function validateDestinationProxyConstructors() internal view { + /** + * multichain/ + */ + validateBN254CertificateVerifierImmutables(Env.proxy.bn254CertificateVerifier()); + validateECDSACertificateVerifierImmutables(Env.proxy.ecdsaCertificateVerifier()); + validateOperatorTableUpdaterImmutables(Env.proxy.operatorTableUpdater()); + + /** + * avs/ + */ + validateTaskMailboxImmutables(Env.proxy.taskMailbox()); + } + + /// @dev Validate that the proxies are already initialized. + function validateProxiesAlreadyInitialized() internal { + /** + * pemissions/ + */ + // KeyRegistrar and PermissionController are initializable, but do not expose the `initialize` function. + + /** + * core/ + */ + validateAllocationManagerInitialized(Env.proxy.allocationManager()); + validateAVSDirectoryInitialized(Env.proxy.avsDirectory()); + validateDelegationManagerInitialized(Env.proxy.delegationManager()); + // Protocol registry tested in the `validateDestinationProxiesAlreadyInitialized` function + // ReleaseManager is initializable, but does not expose the `initialize` function. + validateRewardsCoordinatorInitialized(Env.proxy.rewardsCoordinator()); + validateStrategyManagerInitialized(Env.proxy.strategyManager()); + + /** + * pods/ + */ + // EigenPod proxies are initialized by individual users + validateEigenPodManagerInitialized(Env.proxy.eigenPodManager()); + + /** + * strategies/ + */ + validateEigenStrategyInitialized(Env.proxy.eigenStrategy()); + // StrategyBase proxies are initialized when deployed by factory + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + validateStrategyBaseTVLLimitsInitialized(Env.instance.strategyBaseTVLLimits(i)); + } + validateStrategyFactoryInitialized(Env.proxy.strategyFactory()); + + /** + * multichain/ + */ + validateCrossChainRegistryInitialized(Env.proxy.crossChainRegistry()); + + validateDestinationProxiesAlreadyInitialized(); + } + + function validateDestinationProxiesAlreadyInitialized() internal { + /** + * core/ + */ + validateProtocolRegistryInitialized(Env.proxy.protocolRegistry()); + + /** + * multichain/ + */ + validateOperatorTableUpdaterInitialized(Env.proxy.operatorTableUpdater()); + // BN254 and ECDSA certificate verifiers are initializable, but do not expose the `initialize` function. + + /** + * avs/ + */ + validateTaskMailboxInitialized(Env.proxy.taskMailbox()); + } + + function validateProxyStorage() internal view { + { + /** + * permissions/ + */ + + // PauserRegistry is also deployed on destination chain and tested in the `validateDestinationProxyStorage` function + // PermissionController and KeyRegistrar have no initial storage + } + + { + /** + * core/ + */ + AllocationManager allocationManager = Env.proxy.allocationManager(); + assertTrue(allocationManager.paused() == 0, "alm.paused invalid"); + + AVSDirectory avsDirectory = Env.proxy.avsDirectory(); + assertTrue(avsDirectory.owner() == Env.executorMultisig(), "avsD.owner invalid"); + assertTrue(avsDirectory.paused() == 0, "avsD.paused invalid"); + + DelegationManager delegation = Env.proxy.delegationManager(); + assertTrue(delegation.paused() == 0, "dm.paused invalid"); + + // Protocol registry tested in the `validateDestinationProxyStorage` function + + // ReleaseManager has no initial storage + + RewardsCoordinator rewards = Env.proxy.rewardsCoordinator(); + assertTrue(rewards.owner() == Env.opsMultisig(), "rc.owner invalid"); + assertTrue(rewards.paused() == Env.REWARDS_PAUSE_STATUS(), "rc.paused invalid"); + assertTrue(rewards.rewardsUpdater() == Env.REWARDS_UPDATER(), "rc.updater invalid"); + assertTrue(rewards.activationDelay() == Env.ACTIVATION_DELAY(), "rc.activationDelay invalid"); + assertTrue(rewards.defaultOperatorSplitBips() == Env.DEFAULT_SPLIT_BIPS(), "rc.splitBips invalid"); + + StrategyManager strategyManager = Env.proxy.strategyManager(); + assertTrue(strategyManager.owner() == Env.executorMultisig(), "sm.owner invalid"); + assertTrue(strategyManager.paused() == 0, "sm.paused invalid"); + assertTrue( + strategyManager.strategyWhitelister() == address(Env.proxy.strategyFactory()), "sm.whitelister invalid" + ); + } + + { + /** + * pods/ + */ + // EigenPod proxies are initialized by individual users + + EigenPodManager eigenPodManager = Env.proxy.eigenPodManager(); + assertTrue(eigenPodManager.owner() == Env.executorMultisig(), "epm.owner invalid"); + if (Env.supportsEigenPods()) { + assertTrue(eigenPodManager.paused() == 0, "epm.paused invalid"); + } + } + + { + /** + * strategies/ + */ + EigenStrategy eigenStrategy = Env.proxy.eigenStrategy(); + assertTrue(eigenStrategy.paused() == 0, "eigenStrat.paused invalid"); + assertTrue(address(eigenStrategy.EIGEN()) == address(Env.proxy.eigen()), "eigenStrat.EIGEN invalid"); + assertTrue( + address(eigenStrategy.underlyingToken()) == address(Env.proxy.beigen()), "eigenStrat.underlying invalid" + ); + + // StrategyBase proxies are initialized when deployed by factory + + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + StrategyBaseTVLLimits strategy = Env.instance.strategyBaseTVLLimits(i); + + assertTrue(strategy.maxPerDeposit() == type(uint256).max, "stratTVLLim.maxPerDeposit invalid"); + assertTrue(strategy.maxTotalDeposits() == type(uint256).max, "stratTVLLim.maxPerDeposit invalid"); + } + + StrategyFactory strategyFactory = Env.proxy.strategyFactory(); + assertTrue(strategyFactory.owner() == Env.opsMultisig(), "sFact.owner invalid"); + assertTrue(strategyFactory.paused() == 0, "sFact.paused invalid"); + assertTrue(strategyFactory.strategyBeacon() == Env.beacon.strategyBase(), "sFact.beacon invalid"); + } + { + /** + * multichain/ + */ + // Operator table updater and certificate verifies do not have initial storage + CrossChainRegistry crossChainRegistry = Env.proxy.crossChainRegistry(); + assertTrue(crossChainRegistry.owner() == Env.opsMultisig(), "crossChainRegistry owner invalid"); + assertTrue( + crossChainRegistry.getTableUpdateCadence() == Env.TABLE_UPDATE_CADENCE(), + "crossChainRegistry table update cadence invalid" + ); + if (Env.isSource()) { + assertTrue(crossChainRegistry.paused() == 0, "crossChainRegistry paused invalid"); + } else { + // For hoodi, the paused status is 31 (all flags set) + assertTrue(crossChainRegistry.paused() == 31, "crossChainRegistry paused invalid"); + } + } + + validateDestinationProxyStorage(); + } + + function validateDestinationProxyStorage() internal view { + { + /** + * permissions/ + */ + // PauserRegistry is also deployed on destination chain + PauserRegistry registry = Env.impl.pauserRegistry(); + assertTrue(registry.isPauser(Env.pauserMultisig()), "pauser multisig should be pauser"); + assertTrue(registry.isPauser(Env.opsMultisig()), "ops multisig should be pauser"); + assertTrue(registry.isPauser(address(Env.proxy.protocolRegistry())), "protocol registry should be pauser"); + if (Env.isCoreProtocolDeployed()) { + assertTrue(registry.isPauser(Env.executorMultisig()), "executor multisig should be pauser"); + assertTrue(registry.unpauser() == Env.executorMultisig(), "executor multisig should be unpauser"); + } else { + assertTrue(registry.unpauser() == Env.opsMultisig(), "ops multisig should be unpauser"); + } + } + + { + /** + * core/ + */ + ProtocolRegistry protocolRegistry = Env.proxy.protocolRegistry(); + assertTrue( + protocolRegistry.hasRole(protocolRegistry.PAUSER_ROLE(), Env.pauserMultisig()), + "pr.pauserMultisig invalid" + ); + assertTrue( + protocolRegistry.hasRole(protocolRegistry.DEFAULT_ADMIN_ROLE(), Env.executorMultisig()), + "pr.defaultAdmin invalid" + ); + } + + { + /** + * multichain/ + */ + OperatorTableUpdater operatorTableUpdater = Env.proxy.operatorTableUpdater(); + assertTrue(operatorTableUpdater.owner() == Env.opsMultisig(), "operatorTableUpdater owner invalid"); + assertTrue( + operatorTableUpdater.globalRootConfirmationThreshold() == 10_000, + "operatorTableUpdater globalRootConfirmationThreshold invalid" + ); + // Reset of params are dependent on per chain state (eg. generator state) + } + + { + /** + * avs/ + */ + TaskMailbox taskMailbox = Env.proxy.taskMailbox(); + assertTrue(taskMailbox.owner() == Env.opsMultisig(), "taskMailbox owner invalid"); + assertTrue(taskMailbox.feeSplit() == 0, "taskMailbox feeSplit invalid"); + assertTrue(taskMailbox.feeSplitCollector() == Env.opsMultisig(), "taskMailbox feeSplitCollector invalid"); + } + } + + /** + * + * IMPLEMENTATION VALIDATION + * + */ + + /// @dev Validate that the implementation constructors are correctly set + function validateImplConstructors() internal view { + /** + * pemissions/ + */ + // PermissionController has no constructor + validateKeyRegistrarImmutables(Env.impl.keyRegistrar()); + + /** + * core/ + */ + validateAllocationManagerViewImmutables(Env.impl.allocationManagerView()); + validateAllocationManagerImmutables(Env.impl.allocationManager()); + validateAVSDirectoryImmutables(Env.impl.avsDirectory()); + validateDelegationManagerImmutables(Env.impl.delegationManager()); + // ProtocolRegistry has no constructor + validateReleaseManagerImmutables(Env.impl.releaseManager()); + validateRewardsCoordinatorImmutables(Env.impl.rewardsCoordinator()); + validateStrategyManagerImmutables(Env.impl.strategyManager()); + + /** + * pods/ + */ + validateEigenPodImmutables(Env.impl.eigenPod()); + validateEigenPodManagerImmutables(Env.impl.eigenPodManager()); + + /** + * strategies/ + */ + validateEigenStrategyImmutables(Env.impl.eigenStrategy()); + validateStrategyBaseImmutables(Env.impl.strategyBase()); + validateStrategyBaseTVLLimitsImmutables(Env.impl.strategyBaseTVLLimits()); + validateStrategyFactoryImmutables(Env.impl.strategyFactory()); + + /** + * multichain/ + */ + validateCrossChainRegistryImmutables(Env.impl.crossChainRegistry()); + + validateDestinationImplConstructors(); + } + + function validateDestinationImplConstructors() internal view { + /** + * multichain/ + */ + validateBN254CertificateVerifierImmutables(Env.impl.bn254CertificateVerifier()); + validateECDSACertificateVerifierImmutables(Env.impl.ecdsaCertificateVerifier()); + validateOperatorTableUpdaterImmutables(Env.impl.operatorTableUpdater()); + + /** + * avs/ + */ + validateTaskMailboxImmutables(Env.impl.taskMailbox()); + } + + /// @dev Validate that the implementation contracts are not initializable. + /// @dev Each function checks that initializing the contract will revert. + function validateImplsNotInitializable() internal { + /** + * pemissions/ + */ + // KeyRegistrar and PermissionController are initializable, but do not expose the `initialize` function. + + /** + * core/ + */ + // AllocationManagerView is initializable, but does not expose the `initialize` function. + validateAllocationManagerInitialized(Env.impl.allocationManager()); + validateAVSDirectoryInitialized(Env.impl.avsDirectory()); + validateDelegationManagerInitialized(Env.impl.delegationManager()); + // Protocol registry tested in the `validateDestinationImplsNotInitializable` function + // ReleaseManager is initializable, but does not expose the `initialize` function. + validateRewardsCoordinatorInitialized(Env.impl.rewardsCoordinator()); + validateStrategyManagerInitialized(Env.impl.strategyManager()); + + /** + * pods/ + */ + // EigenPod implementations are initialized by individual users + validateEigenPodManagerInitialized(Env.impl.eigenPodManager()); + + /** + * strategies/ + */ + validateEigenStrategyInitialized(Env.impl.eigenStrategy()); + // StrategyBase implementations are initialized when deployed by factory + validateStrategyBaseTVLLimitsInitialized(Env.impl.strategyBaseTVLLimits()); + validateStrategyFactoryInitialized(Env.impl.strategyFactory()); + + /** + * multichain/ + */ + validateCrossChainRegistryInitialized(Env.impl.crossChainRegistry()); + + validateDestinationImplsNotInitializable(); + } + + function validateDestinationImplsNotInitializable() internal { + /** + * core/ + */ + validateProtocolRegistryInitialized(Env.impl.protocolRegistry()); + + /** + * multichain/ + */ + validateOperatorTableUpdaterInitialized(Env.impl.operatorTableUpdater()); + // BN254 and ECDSA certificate verifiers are initializable, but do not expose the `initialize` function. + + /** + * avs/ + */ + validateTaskMailboxInitialized(Env.impl.taskMailbox()); + } + + /** + * @notice After the upgrade is complete, call to _validateNewImplAddresses to ensure the impl addresses match the proxy admin's reported implementation address. + */ + function validateImplAddressesMatchProxy() internal view { + /** + * pemissions/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.permissionController())) == address(Env.impl.permissionController()), + "permissionController impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.keyRegistrar())) == address(Env.impl.keyRegistrar()), + "keyRegistrar impl address mismatch" + ); + + /** + * core/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.allocationManager())) == address(Env.impl.allocationManager()), + "allocationManager impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.avsDirectory())) == address(Env.impl.avsDirectory()), + "avsDirectory impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.delegationManager())) == address(Env.impl.delegationManager()), + "delegationManager impl address mismatch" + ); + // Protocol registry tested in the `validateDestinationImplAddressesMatchProxy` function + assertTrue( + _getProxyImpl(address(Env.proxy.releaseManager())) == address(Env.impl.releaseManager()), + "releaseManager impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.rewardsCoordinator())) == address(Env.impl.rewardsCoordinator()), + "rewardsCoordinator impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.strategyManager())) == address(Env.impl.strategyManager()), + "strategyManager impl address mismatch" + ); + + /** + * pods/ + */ + assertTrue( + Env.beacon.eigenPod().implementation() == address(Env.impl.eigenPod()), "eigenPod impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.eigenPodManager())) == address(Env.impl.eigenPodManager()), + "eigenPodManager impl address mismatch" + ); + + /** + * strategies/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.eigenStrategy())) == address(Env.impl.eigenStrategy()), + "eigenStrategy impl address mismatch" + ); + assertTrue( + Env.beacon.strategyBase().implementation() == address(Env.impl.strategyBase()), + "strategyBase impl address mismatch" + ); + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + for (uint256 i = 0; i < count; i++) { + assertTrue( + _getProxyImpl(address(Env.instance.strategyBaseTVLLimits(i))) + == address(Env.impl.strategyBaseTVLLimits()), + "strategyBaseTVLLimits impl address mismatch" + ); + } + assertTrue( + _getProxyImpl(address(Env.proxy.strategyFactory())) == address(Env.impl.strategyFactory()), + "strategyFactory impl address mismatch" + ); + + /** + * multichain/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.crossChainRegistry())) == address(Env.impl.crossChainRegistry()), + "operatorTableUpdater impl address mismatch" + ); + + validateDestinationImplAddressesMatchProxy(); + } + + function validateDestinationImplAddressesMatchProxy() internal view { + /** + * core/ + */ + /// @dev Skip the protocol registry validation as it will be deployed while the upgrade is in progress. + /// TODO: Uncomment this after v1.9.0 is live + // assertTrue( + // _getProxyImpl(address(Env.proxy.protocolRegistry())) == address(Env.impl.protocolRegistry()), + // "protocolRegistry impl address mismatch" + // ); + + /** + * multichain/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.bn254CertificateVerifier())) == address(Env.impl.bn254CertificateVerifier()), + "bn254CertificateVerifier impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.ecdsaCertificateVerifier())) == address(Env.impl.ecdsaCertificateVerifier()), + "ecdsaCertificateVerifier impl address mismatch" + ); + assertTrue( + _getProxyImpl(address(Env.proxy.operatorTableUpdater())) == address(Env.impl.operatorTableUpdater()), + "crossChainRegistry impl address mismatch" + ); + + /** + * avs/ + */ + assertTrue( + _getProxyImpl(address(Env.proxy.taskMailbox())) == address(Env.impl.taskMailbox()), + "taskMailbox impl address mismatch" + ); + } + + /** + * + * VERSION VALIDATION FUNCTIONS + * + */ + /// Validate versions of specific contracts + /// @dev We need to validate versions of specific contracts because some contracts can have mismatched versions. + function validateKeyRegistrarVersion() internal view { + require(_strEq(Env.impl.keyRegistrar().version(), Env.deployVersion()), "keyRegistrar version mismatch"); + } + + function validateAVSDirectoryVersion() internal view { + require(_strEq(Env.impl.avsDirectory().version(), Env.deployVersion()), "avsDirectory version incorrect"); + } + + function validateDelegationManagerVersion() internal view { + require( + _strEq(Env.impl.delegationManager().version(), Env.deployVersion()), "delegationManager version incorrect" + ); + } + + function validateStrategyManagerVersion() internal view { + require(_strEq(Env.impl.strategyManager().version(), Env.deployVersion()), "strategyManager version incorrect"); + } + + function validateECDSACertificateVerifierVersion() internal view { + require( + _strEq(Env.impl.ecdsaCertificateVerifier().version(), Env.deployVersion()), + "ecdsaCertificateVerifier version incorrect" + ); + } + + /** + * + * VALIDATE IMMUTABLES + * + */ + /// @dev These functions are used to validate the immutables of either proxy or implementation contracts. + + /** + * pemissions/ + */ + function validateKeyRegistrarImmutables( + KeyRegistrar keyRegistrar + ) internal view { + assertTrue( + keyRegistrar.permissionController() == Env.proxy.permissionController(), + "keyRegistrar permissionController incorrect" + ); + assertTrue( + keyRegistrar.allocationManager() == Env.proxy.allocationManager(), + "keyRegistrar allocationManager incorrect" + ); + } + + // PermissionController has no immutables + + /** + * core/ + */ + function validateAllocationManagerViewImmutables( + AllocationManagerView allocationManagerView + ) internal view { + assertTrue( + allocationManagerView.delegation() == Env.proxy.delegationManager(), + "allocationManagerView delegation incorrect" + ); + assertTrue( + allocationManagerView.eigenStrategy() == Env.proxy.eigenStrategy(), + "allocationManagerView eigenStrategy incorrect" + ); + assertTrue( + allocationManagerView.DEALLOCATION_DELAY() == Env.MIN_WITHDRAWAL_DELAY(), + "allocationManagerView DEALLOCATION_DELAY incorrect" + ); + assertTrue( + allocationManagerView.ALLOCATION_CONFIGURATION_DELAY() == Env.ALLOCATION_CONFIGURATION_DELAY(), + "allocationManagerView ALLOCATION_CONFIGURATION_DELAY incorrect" + ); + } + + function validateAllocationManagerImmutables( + AllocationManager allocationManager + ) internal view { + assertTrue( + allocationManager.viewImplementation() == address(Env.impl.allocationManagerView()), + "allocationManager allocationManagerView incorrect" + ); + assertTrue( + allocationManager.delegation() == Env.proxy.delegationManager(), "allocationManager delegation incorrect" + ); + assertTrue( + allocationManager.eigenStrategy() == Env.proxy.eigenStrategy(), "allocationManager eigenStrategy incorrect" + ); + assertTrue( + allocationManager.pauserRegistry() == Env.impl.pauserRegistry(), + "allocationManager pauserRegistry incorrect" + ); + assertTrue( + allocationManager.permissionController() == Env.proxy.permissionController(), + "allocationManager permissionController incorrect" + ); + assertTrue( + allocationManager.DEALLOCATION_DELAY() == Env.MIN_WITHDRAWAL_DELAY(), + "allocationManager DEALLOCATION_DELAY incorrect" + ); + assertTrue( + allocationManager.ALLOCATION_CONFIGURATION_DELAY() == Env.ALLOCATION_CONFIGURATION_DELAY(), + "allocationManager ALLOCATION_CONFIGURATION_DELAY incorrect" + ); + } + + function validateAVSDirectoryImmutables( + AVSDirectory avsDirectory + ) internal view { + assertTrue(avsDirectory.delegation() == Env.proxy.delegationManager(), "avsDirectory delegation incorrect"); + assertTrue(avsDirectory.pauserRegistry() == Env.impl.pauserRegistry(), "avsDirectory pauserRegistry incorrect"); + } + + function validateDelegationManagerImmutables( + DelegationManager delegation + ) internal view { + assertTrue( + delegation.strategyManager() == Env.proxy.strategyManager(), "delegationManager strategyManager incorrect" + ); + assertTrue( + delegation.eigenPodManager() == Env.proxy.eigenPodManager(), "delegationManager eigenPodManager incorrect" + ); + assertTrue( + delegation.allocationManager() == Env.proxy.allocationManager(), + "delegationManager allocationManager incorrect" + ); + assertTrue( + delegation.pauserRegistry() == Env.impl.pauserRegistry(), "delegationManager pauserRegistry incorrect" + ); + assertTrue( + delegation.permissionController() == Env.proxy.permissionController(), + "delegationManager permissionController incorrect" + ); + assertTrue( + delegation.minWithdrawalDelayBlocks() == Env.MIN_WITHDRAWAL_DELAY(), + "delegationManager minWithdrawalDelayBlocks incorrect" + ); + } + + function validateReleaseManagerImmutables( + ReleaseManager releaseManager + ) internal view { + assertTrue( + releaseManager.permissionController() == Env.proxy.permissionController(), + "releaseManager permissionController incorrect" + ); + } + + function validateRewardsCoordinatorImmutables( + RewardsCoordinator rewardsCoordinator + ) internal view { + assertTrue( + rewardsCoordinator.delegationManager() == Env.proxy.delegationManager(), + "rewardsCoordinator delegationManager incorrect" + ); + assertTrue( + rewardsCoordinator.strategyManager() == Env.proxy.strategyManager(), + "rewardsCoordinator strategyManager incorrect" + ); + assertTrue( + rewardsCoordinator.allocationManager() == Env.proxy.allocationManager(), + "rewardsCoordinator allocationManager incorrect" + ); + assertTrue( + rewardsCoordinator.pauserRegistry() == Env.impl.pauserRegistry(), + "rewardsCoordinator pauserRegistry incorrect" + ); + assertTrue( + rewardsCoordinator.permissionController() == Env.proxy.permissionController(), + "rewardsCoordinator permissionController incorrect" + ); + assertTrue( + rewardsCoordinator.CALCULATION_INTERVAL_SECONDS() == Env.CALCULATION_INTERVAL_SECONDS(), + "rewardsCoordinator CALCULATION_INTERVAL_SECONDS incorrect" + ); + assertTrue( + rewardsCoordinator.MAX_REWARDS_DURATION() == Env.MAX_REWARDS_DURATION(), + "rewardsCoordinator MAX_REWARDS_DURATION incorrect" + ); + assertTrue( + rewardsCoordinator.MAX_RETROACTIVE_LENGTH() == Env.MAX_RETROACTIVE_LENGTH(), + "rewardsCoordinator MAX_RETROACTIVE_LENGTH incorrect" + ); + assertTrue( + rewardsCoordinator.MAX_FUTURE_LENGTH() == Env.MAX_FUTURE_LENGTH(), + "rewardsCoordinator MAX_FUTURE_LENGTH incorrect" + ); + assertTrue( + rewardsCoordinator.GENESIS_REWARDS_TIMESTAMP() == Env.GENESIS_REWARDS_TIMESTAMP(), + "rewardsCoordinator GENESIS_REWARDS_TIMESTAMP incorrect" + ); + } + + function validateStrategyManagerImmutables( + StrategyManager strategyManager + ) internal view { + assertTrue( + strategyManager.allocationManager() == Env.proxy.allocationManager(), + "strategyManager allocationManager incorrect" + ); + assertTrue( + strategyManager.delegation() == Env.proxy.delegationManager(), "strategyManager delegation incorrect" + ); + assertTrue( + strategyManager.pauserRegistry() == Env.impl.pauserRegistry(), "strategyManager pauserRegistry incorrect" + ); + } + + /** + * pods/ + */ + function validateEigenPodImmutables( + EigenPod eigenPod + ) internal view { + assertTrue(eigenPod.ethPOS() == Env.ethPOS(), "eigenPod ethPOS incorrect"); + assertTrue(eigenPod.eigenPodManager() == Env.proxy.eigenPodManager(), "eigenPod eigenPodManager incorrect"); + } + + function validateEigenPodManagerImmutables( + EigenPodManager eigenPodManager + ) internal view { + assertTrue(eigenPodManager.ethPOS() == Env.ethPOS(), "eigenPodManager ethPOS incorrect"); + assertTrue( + eigenPodManager.eigenPodBeacon() == Env.beacon.eigenPod(), "eigenPodManager eigenPodBeacon incorrect" + ); + assertTrue( + eigenPodManager.delegationManager() == Env.proxy.delegationManager(), + "eigenPodManager delegationManager incorrect" + ); + assertTrue( + eigenPodManager.pauserRegistry() == Env.impl.pauserRegistry(), "eigenPodManager pauserRegistry incorrect" + ); + } + + /** + * strategies/ + */ + function validateEigenStrategyImmutables( + EigenStrategy eigenStrategy + ) internal view { + assertTrue( + eigenStrategy.strategyManager() == Env.proxy.strategyManager(), "eigenStrategy strategyManager incorrect" + ); + assertTrue( + eigenStrategy.pauserRegistry() == Env.impl.pauserRegistry(), "eigenStrategy pauserRegistry incorrect" + ); + } + + function validateStrategyBaseImmutables( + StrategyBase strategyBase + ) internal view { + assertTrue( + strategyBase.strategyManager() == Env.proxy.strategyManager(), "strategyBase strategyManager incorrect" + ); + assertTrue(strategyBase.pauserRegistry() == Env.impl.pauserRegistry(), "strategyBase pauserRegistry incorrect"); + } + + function validateStrategyBaseTVLLimitsImmutables( + StrategyBaseTVLLimits strategyBaseTVLLimits + ) internal view { + assertTrue( + strategyBaseTVLLimits.strategyManager() == Env.proxy.strategyManager(), + "strategyBaseTVLLimits strategyManager incorrect" + ); + assertTrue( + strategyBaseTVLLimits.pauserRegistry() == Env.impl.pauserRegistry(), + "strategyBaseTVLLimits pauserRegistry incorrect" + ); + } + + function validateStrategyFactoryImmutables( + StrategyFactory strategyFactory + ) internal view { + assertTrue( + strategyFactory.strategyManager() == Env.proxy.strategyManager(), + "strategyFactory strategyManager incorrect" + ); + assertTrue( + strategyFactory.pauserRegistry() == Env.impl.pauserRegistry(), "strategyFactory pauserRegistry incorrect" + ); + } + + /** + * multichain/ + */ + function validateBN254CertificateVerifierImmutables( + BN254CertificateVerifier bn254CertificateVerifier + ) internal view { + assertTrue( + bn254CertificateVerifier.operatorTableUpdater() == Env.proxy.operatorTableUpdater(), + "bn254CertificateVerifier operatorTableUpdater incorrect" + ); + } + + function validateCrossChainRegistryImmutables( + CrossChainRegistry crossChainRegistry + ) internal view { + assertTrue( + crossChainRegistry.allocationManager() == Env.proxy.allocationManager(), + "crossChainRegistry allocationManager incorrect" + ); + assertTrue( + crossChainRegistry.keyRegistrar() == Env.proxy.keyRegistrar(), "crossChainRegistry keyRegistrar incorrect" + ); + assertTrue( + crossChainRegistry.permissionController() == Env.proxy.permissionController(), + "crossChainRegistry permissionController incorrect" + ); + assertTrue( + crossChainRegistry.pauserRegistry() == Env.impl.pauserRegistry(), + "crossChainRegistry pauserRegistry incorrect" + ); + } + + function validateECDSACertificateVerifierImmutables( + ECDSACertificateVerifier ecdsaCertificateVerifier + ) internal view { + assertTrue( + ecdsaCertificateVerifier.operatorTableUpdater() == Env.proxy.operatorTableUpdater(), + "ecdsaCertificateVerifier operatorTableUpdater incorrect" + ); + } + + function validateOperatorTableUpdaterImmutables( + OperatorTableUpdater operatorTableUpdater + ) internal view { + assertTrue( + operatorTableUpdater.bn254CertificateVerifier() == Env.proxy.bn254CertificateVerifier(), + "operatorTableUpdater bn254CertificateVerifier incorrect" + ); + assertTrue( + operatorTableUpdater.ecdsaCertificateVerifier() == Env.proxy.ecdsaCertificateVerifier(), + "operatorTableUpdater ecdsaCertificateVerifier incorrect" + ); + assertTrue( + operatorTableUpdater.pauserRegistry() == Env.impl.pauserRegistry(), + "operatorTableUpdater pauserRegistry incorrect" + ); + } + + /** + * avs/ + */ + function validateTaskMailboxImmutables( + TaskMailbox taskMailbox + ) internal view { + assertTrue( + taskMailbox.BN254_CERTIFICATE_VERIFIER() == address(Env.proxy.bn254CertificateVerifier()), + "taskMailbox BN254_CERTIFICATE_VERIFIER incorrect" + ); + assertTrue( + taskMailbox.ECDSA_CERTIFICATE_VERIFIER() == address(Env.proxy.ecdsaCertificateVerifier()), + "taskMailbox ECDSA_CERTIFICATE_VERIFIER incorrect" + ); + assertTrue(taskMailbox.MAX_TASK_SLA() == Env.MAX_TASK_SLA(), "taskMailbox MAX_TASK_SLA incorrect"); + } + + /** + * + * VALIDATE INITIALIZED + * + */ + + /// @dev These functions are used to validate the initialized state of either proxy or implementation contracts. + + /** + * pemissions/ + */ + // KeyRegistrar and PermissionController are initializable, but do not expose the `initialize` function. + + /** + * core/ + */ + function validateAllocationManagerInitialized( + AllocationManager allocationManager + ) internal { + vm.expectRevert(errInit); + allocationManager.initialize(0); + } + + function validateAVSDirectoryInitialized( + AVSDirectory avsDirectory + ) internal { + vm.expectRevert(errInit); + avsDirectory.initialize(address(0), 0); + } + + function validateDelegationManagerInitialized( + DelegationManager delegationManager + ) internal { + vm.expectRevert(errInit); + delegationManager.initialize(0); + } + + function validateProtocolRegistryInitialized( + ProtocolRegistry protocolRegistry + ) internal { + vm.expectRevert(errInit); + protocolRegistry.initialize(address(0), address(0)); + } + + // ReleaseManager is initializable, but does not expose the `initialize` function. + + function validateRewardsCoordinatorInitialized( + RewardsCoordinator rewardsCoordinator + ) internal { + vm.expectRevert(errInit); + rewardsCoordinator.initialize(address(0), 0, address(0), 0, 0); + } + + function validateStrategyManagerInitialized( + StrategyManager strategyManager + ) internal { + vm.expectRevert(errInit); + strategyManager.initialize(address(0), address(0), 0); + } + + /** + * pods/ + */ + // EigenPod proxies are initialized by individual users + + function validateEigenPodManagerInitialized( + EigenPodManager eigenPodManager + ) internal { + vm.expectRevert(errInit); + eigenPodManager.initialize(address(0), 0); + } + + /** + * strategies/ + */ + function validateEigenStrategyInitialized( + EigenStrategy eigenStrategy + ) internal { + vm.expectRevert(errInit); + eigenStrategy.initialize(IEigen(address(0)), IBackingEigen(address(0))); + } + + // StrategyBase proxies are initialized when deployed by factory + + function validateStrategyBaseTVLLimitsInitialized( + StrategyBaseTVLLimits strategyBaseTVLLimits + ) internal { + vm.expectRevert(errInit); + strategyBaseTVLLimits.initialize(0, 0, IERC20(address(0))); + } + + function validateStrategyFactoryInitialized( + StrategyFactory strategyFactory + ) internal { + vm.expectRevert(errInit); + strategyFactory.initialize(address(0), 0, UpgradeableBeacon(address(0))); + } + + /** + * multichain/ + */ + function validateCrossChainRegistryInitialized( + CrossChainRegistry crossChainRegistry + ) internal { + vm.expectRevert(errInit); + crossChainRegistry.initialize(address(0), 0, 0); + } + + function validateOperatorTableUpdaterInitialized( + OperatorTableUpdater operatorTableUpdater + ) internal { + OperatorSet memory dummyOperatorSet = OperatorSet({avs: address(0), id: 0}); + IOperatorTableCalculatorTypes.BN254OperatorSetInfo memory dummyBN254Info; + vm.expectRevert(errInit); + operatorTableUpdater.initialize(address(0), uint256(0), dummyOperatorSet, 0, dummyBN254Info); + } + + // BN254 and ECDSA certificate verifiers are initializable, but do not expose the `initialize` function. + + /** + * avs/ + */ + function validateTaskMailboxInitialized( + TaskMailbox taskMailbox + ) internal { + vm.expectRevert(errInit); + taskMailbox.initialize(address(0), 0, address(0)); + } + + /** + * + * VALIDATE PROTOCOL REGISTRY + * + */ + + /// @notice Validate the protocol registry by checking the version and all contracts + /// @dev This should be called *after* an upgrade has been completed + function validateProtocolRegistry() internal { + // Version is checked in the `validateDestinationProtocolRegistry` function + + // Check the deployments + address addr; + IProtocolRegistryTypes.DeploymentConfig memory config; + { + /** + * permissions/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(KeyRegistrar).name); + assertTrue(addr == address(Env.proxy.keyRegistrar()), "keyRegistrar address incorrect"); + assertFalse(config.pausable, "keyRegistrar should not be pausable"); + assertFalse(config.deprecated, "keyRegistrar should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(PermissionController).name); + assertTrue(addr == address(Env.proxy.permissionController()), "permissionController address incorrect"); + assertFalse(config.pausable, "permissionController should not be pausable"); + assertFalse(config.deprecated, "permissionController should not be deprecated"); + } + + { + /** + * core/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(AllocationManager).name); + assertTrue(addr == address(Env.proxy.allocationManager()), "allocationManager address incorrect"); + assertTrue(config.pausable, "allocationManager should be pausable"); + assertFalse(config.deprecated, "allocationManager should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(AVSDirectory).name); + assertTrue(addr == address(Env.proxy.avsDirectory()), "avsDirectory address incorrect"); + assertTrue(config.pausable, "avsDirectory should be pausable"); + assertFalse(config.deprecated, "avsDirectory should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(DelegationManager).name); + assertTrue(addr == address(Env.proxy.delegationManager()), "delegationManager address incorrect"); + assertTrue(config.pausable, "delegationManager should be pausable"); + assertFalse(config.deprecated, "delegationManager should not be deprecated"); + + // Protocol registry tested in the `validateDestinationProtocolRegistry` function + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(ReleaseManager).name); + assertTrue(addr == address(Env.proxy.releaseManager()), "releaseManager address incorrect"); + assertFalse(config.pausable, "releaseManager should not be pausable"); + assertFalse(config.deprecated, "releaseManager should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(RewardsCoordinator).name); + assertTrue(addr == address(Env.proxy.rewardsCoordinator()), "rewardsCoordinator address incorrect"); + assertTrue(config.pausable, "rewardsCoordinator should be pausable"); + assertFalse(config.deprecated, "rewardsCoordinator should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(StrategyManager).name); + assertTrue(addr == address(Env.proxy.strategyManager()), "strategyManager address incorrect"); + assertTrue(config.pausable, "strategyManager should be pausable"); + assertFalse(config.deprecated, "strategyManager should not be deprecated"); + } + + { + /** + * pods/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(EigenPodManager).name); + assertTrue(addr == address(Env.proxy.eigenPodManager()), "eigenPodManager address incorrect"); + assertTrue(config.pausable, "eigenPodManager should be pausable"); + assertFalse(config.deprecated, "eigenPodManager should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(EigenPod).name); + assertTrue(addr == address(Env.beacon.eigenPod()), "eigenPod address incorrect"); + assertFalse(config.pausable, "eigenPod should not be pausable"); + assertFalse(config.deprecated, "eigenPod should not be deprecated"); + } + + { + /** + * strategies/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(EigenStrategy).name); + assertTrue(addr == address(Env.proxy.eigenStrategy()), "eigenStrategy address incorrect"); + assertTrue(config.pausable, "eigenStrategy should be pausable"); + assertFalse(config.deprecated, "eigenStrategy should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(StrategyBase).name); + assertTrue(addr == address(Env.beacon.strategyBase()), "strategyBase address incorrect"); + assertFalse(config.pausable, "strategyBase should not be pausable"); + assertFalse(config.deprecated, "strategyBase should not be deprecated"); + + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + string memory baseName = type(StrategyBaseTVLLimits).name; + for (uint256 i = 0; i < count; i++) { + (addr, config) = + Env.proxy.protocolRegistry().getDeployment(string.concat(baseName, "_", Strings.toString(i))); + assertTrue( + addr == address(Env.instance.strategyBaseTVLLimits(i)), "strategyBaseTVLLimits address incorrect" + ); + assertTrue(config.pausable, "strategyBaseTVLLimits should be pausable"); + assertFalse(config.deprecated, "strategyBaseTVLLimits should not be deprecated"); + } + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(StrategyFactory).name); + assertTrue(addr == address(Env.proxy.strategyFactory()), "strategyFactory address incorrect"); + assertTrue(config.pausable, "strategyFactory should be pausable"); + assertFalse(config.deprecated, "strategyFactory should not be deprecated"); + } + + { + /** + * token/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(BackingEigen).name); + assertTrue(addr == address(Env.proxy.beigen()), "bEIGEN address incorrect"); + assertFalse(config.pausable, "bEIGEN should not be pausable"); + assertFalse(config.deprecated, "bEIGEN should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(Eigen).name); + assertTrue(addr == address(Env.proxy.eigen()), "eigenToken address incorrect"); + assertFalse(config.pausable, "eigenToken should not be pausable"); + assertFalse(config.deprecated, "eigenToken should not be deprecated"); + } + + { + /** + * multichain/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(CrossChainRegistry).name); + assertTrue(addr == address(Env.proxy.crossChainRegistry()), "crossChainRegistry address incorrect"); + assertTrue(config.pausable, "crossChainRegistry should be pausable"); + assertFalse(config.deprecated, "crossChainRegistry should not be deprecated"); + } + + validateDestinationProtocolRegistry(); + } + + function validateDestinationProtocolRegistry() internal { + /// First, check the version of the registry + assertTrue( + _strEq(Env.proxy.protocolRegistry().version(), Env.deployVersion()), "protocol registry version incorrect" + ); + + // Then, check the deployments + address addr; + IProtocolRegistryTypes.DeploymentConfig memory config; + + { + /** + * permissions/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(PauserRegistry).name); + assertTrue(addr == address(Env.impl.pauserRegistry()), "pauserRegistry address incorrect"); + assertFalse(config.pausable, "pauserRegistry should not be pausable"); + assertFalse(config.deprecated, "pauserRegistry should not be deprecated"); + } + + { + /** + * core/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(ProtocolRegistry).name); + assertTrue(addr == address(Env.proxy.protocolRegistry()), "protocolRegistry address incorrect"); + assertFalse(config.pausable, "protocolRegistry should not be pausable"); + assertFalse(config.deprecated, "protocolRegistry should not be deprecated"); + } + + { + /** + * multichain/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(BN254CertificateVerifier).name); + assertTrue( + addr == address(Env.proxy.bn254CertificateVerifier()), "bn254CertificateVerifier address incorrect" + ); + assertFalse(config.pausable, "bn254CertificateVerifier should not be pausable"); + assertFalse(config.deprecated, "bn254CertificateVerifier should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(ECDSACertificateVerifier).name); + assertTrue( + addr == address(Env.proxy.ecdsaCertificateVerifier()), "ecdsaCertificateVerifier address incorrect" + ); + assertFalse(config.pausable, "ecdsaCertificateVerifier should not be pausable"); + assertFalse(config.deprecated, "ecdsaCertificateVerifier should not be deprecated"); + + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(OperatorTableUpdater).name); + assertTrue(addr == address(Env.proxy.operatorTableUpdater()), "operatorTableUpdater address incorrect"); + assertTrue(config.pausable, "operatorTableUpdater should not be pausable"); + assertFalse(config.deprecated, "operatorTableUpdater should not be deprecated"); + } + + { + /** + * avs/ + */ + (addr, config) = Env.proxy.protocolRegistry().getDeployment(type(TaskMailbox).name); + assertTrue(addr == address(Env.proxy.taskMailbox()), "taskMailbox address incorrect"); + assertFalse(config.pausable, "taskMailbox should not be pausable"); + assertFalse(config.deprecated, "taskMailbox should not be deprecated"); + } + + // Lastly, attempt to call pauseAll on the protocol registry + vm.prank(Env.pauserMultisig()); + Env.proxy.protocolRegistry().pauseAll(); + } + + /// @dev Query and return `proxyAdmin.getProxyImplementation(proxy)` + function _getProxyImpl( + address proxy + ) internal view returns (address) { + return ProxyAdmin(Env.proxyAdmin()).getProxyImplementation(ITransparentUpgradeableProxy(proxy)); + } + + /// @dev Query and return `proxyAdmin.getProxyAdmin(proxy)` + function _getProxyAdmin( + address proxy + ) internal view returns (address) { + return ProxyAdmin(Env.proxyAdmin()).getProxyAdmin(ITransparentUpgradeableProxy(proxy)); + } + + function _strEq(string memory a, string memory b) internal pure returns (bool) { + return keccak256(abi.encodePacked(a)) == keccak256(abi.encodePacked(b)); + } + + function assertTrue(bool b, string memory err) private pure { + vm.assertTrue(b, err); + } + + function assertFalse(bool b, string memory err) private pure { + vm.assertFalse(b, err); + } +} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/1-deploySourceChain.s.sol b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/1-deploySourceChain.s.sol deleted file mode 100644 index 6587331d54..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/1-deploySourceChain.s.sol +++ /dev/null @@ -1,270 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; -import "../Env.sol"; - -/** - * Purpose: use an EOA to deploy all of the new source chain contracts for this upgrade. - */ -contract DeploySourceChain is EOADeployer { - using Env for *; - - /// forgefmt: disable-next-item - function _runAsEOA() internal override { - // If we're not on a source chain or we're on a version that already has these contracts deployed, we don't need to deploy any contracts - if (!Env.isSourceChain() || _isAlreadyDeployedSourceChain()) { - return; - } - - vm.startBroadcast(); - - // Deploy KeyRegistrar implementation - deployImpl({ - name: type(KeyRegistrar).name, - deployedTo: address( - new KeyRegistrar({ - _permissionController: Env.proxy.permissionController(), - _allocationManager: Env.proxy.allocationManager(), - _version: Env.deployVersion() - }) - ) - }); - - // Deploy KeyRegistrar proxy - deployProxy({ - name: type(KeyRegistrar).name, - deployedTo: address( - new TransparentUpgradeableProxy({ - _logic: address(Env.impl.keyRegistrar()), - admin_: Env.proxyAdmin(), - _data: "" // No initialization needed for KeyRegistrar - }) - ) - }); - - // Deploy CrossChainRegistry implementation - deployImpl({ - name: type(CrossChainRegistry).name, - deployedTo: address( - new CrossChainRegistry({ - _allocationManager: Env.proxy.allocationManager(), - _keyRegistrar: Env.proxy.keyRegistrar(), - _permissionController: Env.proxy.permissionController(), - _pauserRegistry: Env.impl.pauserRegistry(), - _version: Env.deployVersion() - }) - ) - }); - - // Deploy CrossChainRegistry proxy - deployProxy({ - name: type(CrossChainRegistry).name, - deployedTo: address( - new TransparentUpgradeableProxy({ - _logic: address(Env.impl.crossChainRegistry()), - admin_: Env.proxyAdmin(), - _data: abi.encodeCall( - CrossChainRegistry.initialize, - ( - Env.opsMultisig(), // initialOwner - Env.TABLE_UPDATE_CADENCE(), - Env.CROSS_CHAIN_REGISTRY_PAUSE_STATUS() - ) - ) - }) - ) - }); - - // Deploy ReleaseManager implementation - deployImpl({ - name: type(ReleaseManager).name, - deployedTo: address( - new ReleaseManager({_permissionController: Env.proxy.permissionController(), _version: Env.deployVersion()}) - ) - }); - - // Deploy ReleaseManager proxy - deployProxy({ - name: type(ReleaseManager).name, - deployedTo: address( - new TransparentUpgradeableProxy({ - _logic: address(Env.impl.releaseManager()), - admin_: Env.proxyAdmin(), - _data: "" // No initialize function for ReleaseManager - }) - ) - }); - - vm.stopBroadcast(); - } - - function testScript() public virtual { - if (!Env.isSourceChain() || _isAlreadyDeployedSourceChain()) { - return; - } - - // Set the mode to EOA so we can deploy the contracts - super.runAsEOA(); - - _validateStorage(); - _validateProxyAdmins(); - _validateImplConstructors(); - _validateImplsInitialized(); - _validateProxyConstructors(); - _validateProxiesInitialized(); - } - - /// @dev Validate that storage variables are set correctly - function _validateStorage() internal view { - // Validate KeyRegistrar - KeyRegistrar keyRegistrar = Env.proxy.keyRegistrar(); - assertTrue(address(keyRegistrar) != address(0), "keyRegistrar not deployed"); - - // Validate CrossChainRegistry - CrossChainRegistry crossChainRegistry = Env.proxy.crossChainRegistry(); - assertTrue(crossChainRegistry.owner() == Env.opsMultisig(), "ccr.owner invalid"); - assertTrue(crossChainRegistry.paused() == Env.CROSS_CHAIN_REGISTRY_PAUSE_STATUS(), "ccr.paused invalid"); - assertEq( - crossChainRegistry.getTableUpdateCadence(), Env.TABLE_UPDATE_CADENCE(), "ccr.tableUpdateCadence invalid" - ); - - // Validate ReleaseManager - ReleaseManager releaseManager = Env.proxy.releaseManager(); - assertTrue(address(releaseManager) != address(0), "releaseManager not deployed"); - } - - /// @dev Ensure each deployed TUP/beacon is owned by the proxyAdmin/executorMultisig - function _validateProxyAdmins() internal view { - address pa = Env.proxyAdmin(); - - assertTrue(Env._getProxyAdmin(address(Env.proxy.keyRegistrar())) == pa, "keyRegistrar proxyAdmin incorrect"); - assertTrue( - Env._getProxyAdmin(address(Env.proxy.crossChainRegistry())) == pa, "crossChainRegistry proxyAdmin incorrect" - ); - assertTrue(Env._getProxyAdmin(address(Env.proxy.releaseManager())) == pa, "releaseManager proxyAdmin incorrect"); - } - - /// @dev Validate the immutables set in the new implementation constructors - function _validateImplConstructors() internal view { - { - /// KeyRegistrar - KeyRegistrar keyRegistrar = Env.impl.keyRegistrar(); - assertTrue( - address(keyRegistrar.permissionController()) == address(Env.proxy.permissionController()), - "kr.permissionController invalid" - ); - assertTrue( - address(keyRegistrar.allocationManager()) == address(Env.proxy.allocationManager()), - "kr.allocationManager invalid" - ); - assertEq(keyRegistrar.version(), Env.deployVersion(), "kr.version failed"); - } - - { - /// CrossChainRegistry - CrossChainRegistry crossChainRegistry = Env.impl.crossChainRegistry(); - assertTrue( - address(crossChainRegistry.allocationManager()) == address(Env.proxy.allocationManager()), - "ccr.allocationManager invalid" - ); - assertTrue( - address(crossChainRegistry.keyRegistrar()) == address(Env.proxy.keyRegistrar()), - "ccr.keyRegistrar invalid" - ); - assertTrue( - address(crossChainRegistry.permissionController()) == address(Env.proxy.permissionController()), - "ccr.permissionController invalid" - ); - assertTrue( - address(crossChainRegistry.pauserRegistry()) == address(Env.impl.pauserRegistry()), - "ccr.pauserRegistry invalid" - ); - assertEq(crossChainRegistry.version(), Env.deployVersion(), "ccr.version failed"); - } - - { - /// ReleaseManager - ReleaseManager releaseManager = Env.impl.releaseManager(); - assertTrue( - releaseManager.permissionController() == Env.proxy.permissionController(), - "rm.permissionController invalid" - ); - assertEq(releaseManager.version(), Env.deployVersion(), "rm.version failed"); - } - } - - /// @dev Call initialize on all deployed implementations to ensure initializers are disabled - function _validateImplsInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - /// CrossChainRegistry - CrossChainRegistry crossChainRegistry = Env.impl.crossChainRegistry(); - vm.expectRevert(errInit); - crossChainRegistry.initialize(address(0), 1 days, 0); - } - - function _validateProxyConstructors() internal view { - KeyRegistrar keyRegistrar = Env.proxy.keyRegistrar(); - assertEq(keyRegistrar.version(), Env.deployVersion(), "keyRegistrar version mismatch"); - assertTrue( - keyRegistrar.permissionController() == Env.proxy.permissionController(), - "keyRegistrar permissionController mismatch" - ); - assertTrue( - keyRegistrar.allocationManager() == Env.proxy.allocationManager(), "keyRegistrar allocationManager mismatch" - ); - - CrossChainRegistry crossChainRegistry = Env.proxy.crossChainRegistry(); - assertEq(crossChainRegistry.version(), Env.deployVersion(), "crossChainRegistry version mismatch"); - assertTrue( - crossChainRegistry.allocationManager() == Env.proxy.allocationManager(), - "crossChainRegistry allocationManager mismatch" - ); - assertTrue( - crossChainRegistry.keyRegistrar() == Env.proxy.keyRegistrar(), "crossChainRegistry keyRegistrar mismatch" - ); - assertTrue( - crossChainRegistry.permissionController() == Env.proxy.permissionController(), - "crossChainRegistry permissionController mismatch" - ); - assertTrue( - crossChainRegistry.pauserRegistry() == Env.impl.pauserRegistry(), - "crossChainRegistry pauserRegistry mismatch" - ); - - ReleaseManager releaseManager = Env.proxy.releaseManager(); - assertEq(releaseManager.version(), Env.deployVersion(), "releaseManager version mismatch"); - assertTrue( - releaseManager.permissionController() == Env.proxy.permissionController(), - "releaseManager permissionController mismatch" - ); - } - - function _validateProxiesInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - /// CrossChainRegistry - CrossChainRegistry crossChainRegistry = Env.proxy.crossChainRegistry(); - vm.expectRevert(errInit); - crossChainRegistry.initialize(address(0), 1 days, 0); - - // ReleaseManager and KeyRegistrar don't have initialize functions - } - - function _assertTrue(bool b, string memory err) private pure { - assertTrue(b, err); - } - - function _assertFalse(bool b, string memory err) private pure { - assertFalse(b, err); - } - - /// @dev Check if the version is already deployed - function _isAlreadyDeployedSourceChain() internal view returns (bool) { - if (Env._strEq(Env.envVersion(), "1.8.0")) { - return true; - } - return false; - } -} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/2-deployDestinationChainProxies.s.sol b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/2-deployDestinationChainProxies.s.sol deleted file mode 100644 index 5ac183826d..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/2-deployDestinationChainProxies.s.sol +++ /dev/null @@ -1,195 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; -import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; -import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; -import "../Env.sol"; - -/** - * Purpose: Deploy proxy contracts for the destination chain using a multisig. Deploys the following contracts: - * - Empty contract - * Multichain: - * - OperatorTableUpdater - * - ECDSACertificateVerifier - * - BN254CertificateVerifier - * Hourglass: - * - TaskMailbox - */ -contract DeployDestinationChainProxies is MultisigBuilder { - using Env for *; - - /// forgefmt: disable-next-item - function _runAsMultisig() internal virtual override { - // If we're not on a destination chain or we're on a version that already has these contracts deployed, we don't need to deploy any contracts - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - // We don't use the prank modifier here, since we have to write to the env - _startPrank(Env.multichainDeployerMultisig()); - - // 1. Deploy empty contract - address emptyContract = CrosschainDeployLib.deployEmptyContract(Env.multichainDeployerMultisig()); - - // 2. Deploy the proxies pointing to an empty contract - - // OperatorTableUpdater - ITransparentUpgradeableProxy operatorTableUpdaterProxy = CrosschainDeployLib.deployCrosschainProxy({ - implementation: emptyContract, - adminAndDeployer: Env.multichainDeployerMultisig(), - name: type(OperatorTableUpdater).name - }); - - // ECDSACertificateVerifier - ITransparentUpgradeableProxy ecdsaCertificateVerifierProxy = CrosschainDeployLib.deployCrosschainProxy({ - implementation: emptyContract, - adminAndDeployer: Env.multichainDeployerMultisig(), - name: type(ECDSACertificateVerifier).name - }); - - // BN254CertificateVerifier - ITransparentUpgradeableProxy bn254CertificateVerifierProxy = CrosschainDeployLib.deployCrosschainProxy({ - implementation: emptyContract, - adminAndDeployer: Env.multichainDeployerMultisig(), - name: type(BN254CertificateVerifier).name - }); - - // TaskMailbox - ITransparentUpgradeableProxy taskMailboxProxy = CrosschainDeployLib.deployCrosschainProxy({ - implementation: emptyContract, - adminAndDeployer: Env.multichainDeployerMultisig(), - name: type(TaskMailbox).name - }); - - // Stop pranking - _stopPrank(); - - // Save all the contracts to the env - _unsafeAddImplContract(type(EmptyContract).name, emptyContract); - _unsafeAddProxyContract(type(OperatorTableUpdater).name, address(operatorTableUpdaterProxy)); - _unsafeAddProxyContract(type(ECDSACertificateVerifier).name, address(ecdsaCertificateVerifierProxy)); - _unsafeAddProxyContract(type(BN254CertificateVerifier).name, address(bn254CertificateVerifierProxy)); - _unsafeAddProxyContract(type(TaskMailbox).name, address(taskMailboxProxy)); - } - - function testScript() public virtual { - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - execute(); - - _validateProxyAdminIsMultisig(); - _validateExpectedProxyAddress(); - } - - /// @dev Validate that proxies are owned by the multichain deployer multisig (temporarily) - function _validateProxyAdminIsMultisig() internal view { - address multisig = Env.multichainDeployerMultisig(); - - assertTrue( - _getProxyAdminBySlot(address(Env.proxy.operatorTableUpdater())) == multisig, - "operatorTableUpdater proxyAdmin should be multisig" - ); - assertTrue( - _getProxyAdminBySlot(address(Env.proxy.ecdsaCertificateVerifier())) == multisig, - "ecdsaCertificateVerifier proxyAdmin should be multisig" - ); - assertTrue( - _getProxyAdminBySlot(address(Env.proxy.bn254CertificateVerifier())) == multisig, - "bn254CertificateVerifier proxyAdmin should be multisig" - ); - assertTrue( - _getProxyAdminBySlot(address(Env.proxy.taskMailbox())) == multisig, - "taskMailbox proxyAdmin should be multisig" - ); - } - - /// @dev Validate that the expected proxy address is deployed - function _validateExpectedProxyAddress() internal view { - // TaskMailbox - address expectedProxy = _computeExpectedProxyAddress(type(TaskMailbox).name, address(Env.impl.emptyContract())); - address actualProxy = address(Env.proxy.taskMailbox()); - assertEq(expectedProxy, actualProxy, "taskMailbox proxy address mismatch"); - - // OperatorTableUpdater - expectedProxy = _computeExpectedProxyAddress(type(OperatorTableUpdater).name, address(Env.impl.emptyContract())); - actualProxy = address(Env.proxy.operatorTableUpdater()); - assertEq(expectedProxy, actualProxy, "operatorTableUpdater proxy address mismatch"); - - // ECDSACertificateVerifier - expectedProxy = - _computeExpectedProxyAddress(type(ECDSACertificateVerifier).name, address(Env.impl.emptyContract())); - actualProxy = address(Env.proxy.ecdsaCertificateVerifier()); - assertEq(expectedProxy, actualProxy, "ecdsaCertificateVerifier proxy address mismatch"); - - // BN254CertificateVerifier - expectedProxy = - _computeExpectedProxyAddress(type(BN254CertificateVerifier).name, address(Env.impl.emptyContract())); - actualProxy = address(Env.proxy.bn254CertificateVerifier()); - assertEq(expectedProxy, actualProxy, "bn254CertificateVerifier proxy address mismatch"); - } - - /// @dev We have to use the slot directly since _getProxyAdmin expects the caller to be the actual proxy admin - function _getProxyAdminBySlot( - address _proxy - ) internal view returns (address) { - bytes32 adminSlot = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103; - address admin = address(uint160(uint256(vm.load(address(_proxy), adminSlot)))); - return admin; - } - - /// @dev Check if the proxies are deployed by checking if the empty contract is deployed - function _areProxiesDeployed() internal view returns (bool) { - address expectedEmptyContract = CrosschainDeployLib.computeCrosschainAddress({ - deployer: Env.multichainDeployerMultisig(), - initCodeHash: keccak256(type(EmptyContract).creationCode), - name: type(EmptyContract).name - }); - - // If the empty contract is deployed, then the proxies are deployed - if (expectedEmptyContract.code.length > 0) { - return true; - } - return false; - } - - /// @dev Add the contracts to the env - function _addContractsToEnv() internal { - address emptyContract = CrosschainDeployLib.computeCrosschainAddress({ - deployer: Env.multichainDeployerMultisig(), - initCodeHash: keccak256(type(EmptyContract).creationCode), - name: type(EmptyContract).name - }); - _unsafeAddProxyContract( - type(OperatorTableUpdater).name, - _computeExpectedProxyAddress(type(OperatorTableUpdater).name, emptyContract) - ); - _unsafeAddProxyContract( - type(ECDSACertificateVerifier).name, - _computeExpectedProxyAddress(type(ECDSACertificateVerifier).name, emptyContract) - ); - _unsafeAddProxyContract( - type(BN254CertificateVerifier).name, - _computeExpectedProxyAddress(type(BN254CertificateVerifier).name, emptyContract) - ); - } - - /// @dev Compute the expected proxy address for a given name and empty contract - function _computeExpectedProxyAddress(string memory name, address emptyContract) internal view returns (address) { - return CrosschainDeployLib.computeCrosschainUpgradeableProxyAddress({ - adminAndDeployer: Env.multichainDeployerMultisig(), - implementation: emptyContract, - name: name - }); - } - - /// @dev Check if the version is already deployed - function _isAlreadyDeployed() internal view returns (bool) { - if (Env._strEq(Env.envVersion(), "1.8.0")) { - return true; - } - return false; - } -} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/3-deployDestinationChainImpls.s.sol b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/3-deployDestinationChainImpls.s.sol deleted file mode 100644 index 4dd95dfb57..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/3-deployDestinationChainImpls.s.sol +++ /dev/null @@ -1,202 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; -import {DeployDestinationChainProxies} from "./2-deployDestinationChainProxies.s.sol"; -import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; -import "src/contracts/interfaces/IOperatorTableCalculator.sol"; -import "../Env.sol"; - -/** - * Purpose: Deploy implementation contracts for the destination chain using an EOA. - * Multichain: - * - OperatorTableUpdater - * - ECDSACertificateVerifier - * - BN254CertificateVerifier - * Hourglass: - * - TaskMailbox - */ -contract DeployDestinationChainImpls is EOADeployer, DeployDestinationChainProxies { - using Env for *; - - function _runAsEOA() internal override { - // If we're not on a destination chain or we're on a version that already has these contracts deployed, we don't need to deploy any contracts - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - vm.startBroadcast(); - - // Deploy the implementations - - // OperatorTableUpdater - deployImpl({ - name: type(OperatorTableUpdater).name, - deployedTo: address( - new OperatorTableUpdater({ - _bn254CertificateVerifier: Env.proxy.bn254CertificateVerifier(), - _ecdsaCertificateVerifier: Env.proxy.ecdsaCertificateVerifier(), - _pauserRegistry: Env.impl.pauserRegistry(), - _version: Env.deployVersion() - }) - ) - }); - - // ECDSACertificateVerifier - deployImpl({ - name: type(ECDSACertificateVerifier).name, - deployedTo: address( - new ECDSACertificateVerifier({ - _operatorTableUpdater: Env.proxy.operatorTableUpdater(), - _version: Env.deployVersion() - }) - ) - }); - - // BN254CertificateVerifier - deployImpl({ - name: type(BN254CertificateVerifier).name, - deployedTo: address( - new BN254CertificateVerifier({ - _operatorTableUpdater: Env.proxy.operatorTableUpdater(), - _version: Env.deployVersion() - }) - ) - }); - - // TaskMailbox - - deployImpl({ - name: type(TaskMailbox).name, - deployedTo: address( - new TaskMailbox({ - _bn254CertificateVerifier: address(Env.proxy.bn254CertificateVerifier()), - _ecdsaCertificateVerifier: address(Env.proxy.ecdsaCertificateVerifier()), - _maxTaskSLA: Env.MAX_TASK_SLA(), - _version: Env.deployVersion() - }) - ) - }); - - vm.stopBroadcast(); - } - - function testScript() public virtual override { - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - // 1. Deploy destination chain proxies - // Only deploy the proxies if they haven't been deployed yet - /// @dev This is needed in the production environment tests since this step would fail if the proxies are already deployed - if (!_areProxiesDeployed()) { - DeployDestinationChainProxies._runAsMultisig(); - _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() - } else { - // Since the proxies are already deployed, we need to update the env with the proper addresses - _addContractsToEnv(); - } - - // 2. Deploy destination chain impls - super.runAsEOA(); - - // Validate the destination chain - _validateImplConstructors(); - _validateImplsInitialized(); - _validateVersion(); - } - - /// @dev Validate the immutables set in the new implementation constructors - function _validateImplConstructors() internal view { - { - /// OperatorTableUpdater - OperatorTableUpdater operatorTableUpdater = Env.impl.operatorTableUpdater(); - assertTrue( - address(operatorTableUpdater.bn254CertificateVerifier()) - == address(Env.proxy.bn254CertificateVerifier()), - "out.bn254CertificateVerifier invalid" - ); - assertTrue( - address(operatorTableUpdater.ecdsaCertificateVerifier()) - == address(Env.proxy.ecdsaCertificateVerifier()), - "out.ecdsaCertificateVerifier invalid" - ); - assertEq(operatorTableUpdater.version(), Env.deployVersion(), "out.version failed"); - } - - { - /// ECDSACertificateVerifier - ECDSACertificateVerifier ecdsaCertificateVerifier = Env.impl.ecdsaCertificateVerifier(); - assertTrue( - address(ecdsaCertificateVerifier.operatorTableUpdater()) == address(Env.proxy.operatorTableUpdater()), - "ecv.operatorTableUpdater invalid" - ); - assertEq(ecdsaCertificateVerifier.version(), Env.deployVersion(), "ecv.version failed"); - } - - { - /// BN254CertificateVerifier - BN254CertificateVerifier bn254CertificateVerifier = Env.impl.bn254CertificateVerifier(); - assertTrue( - address(bn254CertificateVerifier.operatorTableUpdater()) == address(Env.proxy.operatorTableUpdater()), - "b254cv.operatorTableUpdater invalid" - ); - assertEq(bn254CertificateVerifier.version(), Env.deployVersion(), "b254cv.version failed"); - } - - { - /// TaskMailbox - TaskMailbox taskMailbox = Env.impl.taskMailbox(); - assertTrue( - address(taskMailbox.BN254_CERTIFICATE_VERIFIER()) == address(Env.proxy.bn254CertificateVerifier()), - "tm.bn254CertificateVerifier invalid" - ); - assertTrue( - address(taskMailbox.ECDSA_CERTIFICATE_VERIFIER()) == address(Env.proxy.ecdsaCertificateVerifier()), - "tm.ecdsaCertificateVerifier invalid" - ); - assertEq(taskMailbox.MAX_TASK_SLA(), Env.MAX_TASK_SLA(), "tm.maxTaskSLA failed"); - assertEq(taskMailbox.version(), Env.deployVersion(), "tm.version failed"); - } - } - - /// @dev Call initialize on all deployed implementations to ensure initializers are disabled - function _validateImplsInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - /// OperatorTableUpdater - dummy parameters - OperatorTableUpdater operatorTableUpdater = Env.impl.operatorTableUpdater(); - OperatorSet memory dummyOperatorSet = OperatorSet({avs: address(0), id: 0}); - IOperatorTableCalculatorTypes.BN254OperatorSetInfo memory dummyBN254Info; - - vm.expectRevert(errInit); - operatorTableUpdater.initialize( - address(0), // owner - 0, // initial paused status - dummyOperatorSet, // generator - 0, // globalRootConfirmationThreshold - dummyBN254Info // generatorInfo - ); - - /// TaskMailbox - TaskMailbox taskMailbox = Env.impl.taskMailbox(); - - vm.expectRevert(errInit); - taskMailbox.initialize( - address(0), // owner - 0, // feeSplit - address(0) // feeSplitCollector - ); - - // ECDSACertificateVerifier and BN254CertificateVerifier don't have initialize functions - } - - function _validateVersion() internal view { - string memory expected = Env.deployVersion(); - - assertEq(Env.impl.operatorTableUpdater().version(), expected, "operatorTableUpdater version mismatch"); - assertEq(Env.impl.ecdsaCertificateVerifier().version(), expected, "ecdsaCertificateVerifier version mismatch"); - assertEq(Env.impl.bn254CertificateVerifier().version(), expected, "bn254CertificateVerifier version mismatch"); - assertEq(Env.impl.taskMailbox().version(), expected, "taskMailbox version mismatch"); - } -} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/4-instantiateDestinationChainProxies.s.sol b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/4-instantiateDestinationChainProxies.s.sol deleted file mode 100644 index d5113b2653..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/4-instantiateDestinationChainProxies.s.sol +++ /dev/null @@ -1,453 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; -import {DeployDestinationChainProxies} from "./2-deployDestinationChainProxies.s.sol"; -import {DeployDestinationChainImpls} from "./3-deployDestinationChainImpls.s.sol"; -import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; -import "../Env.sol"; - -import "src/contracts/interfaces/ICrossChainRegistry.sol"; -import "src/contracts/interfaces/IOperatorTableCalculator.sol"; -import "src/contracts/libraries/OperatorSetLib.sol"; -import "src/contracts/libraries/BN254.sol"; - -// For TOML parsing -import {stdToml} from "forge-std/StdToml.sol"; - -/** - * Purpose: Upgrade proxies to point to implementations and transfer control to ProxyAdmin. - */ -contract InstantiateDestinationChainProxies is DeployDestinationChainImpls { - using Env for *; - using OperatorSetLib for OperatorSet; - using stdToml for string; - - /// forgefmt: disable-next-item - function _runAsMultisig() internal override prank(Env.multichainDeployerMultisig()) { - // If we're not on a destination chain or we're on a version that already has these contracts deployed, we don't need to do anything - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - // Upgrade the proxies to point to the actual implementations - // ECDSACertificateVerifier - ITransparentUpgradeableProxy ecdsaCertificateVerifierProxy = - ITransparentUpgradeableProxy(payable(address(Env.proxy.ecdsaCertificateVerifier()))); - ecdsaCertificateVerifierProxy.upgradeTo(address(Env.impl.ecdsaCertificateVerifier())); - - // BN254CertificateVerifier - ITransparentUpgradeableProxy bn254CertificateVerifierProxy = - ITransparentUpgradeableProxy(payable(address(Env.proxy.bn254CertificateVerifier()))); - bn254CertificateVerifierProxy.upgradeTo(address(Env.impl.bn254CertificateVerifier())); - - // OperatorTableUpdater - we also initialize this contract - OperatorTableUpdaterInitParams memory operatorTableUpdaterInitParams = _getTableUpdaterInitParams(); - ITransparentUpgradeableProxy operatorTableUpdaterProxy = - ITransparentUpgradeableProxy(payable(address(Env.proxy.operatorTableUpdater()))); - operatorTableUpdaterProxy.upgradeToAndCall( - address(Env.impl.operatorTableUpdater()), - abi.encodeCall( - OperatorTableUpdater.initialize, - ( - Env.opsMultisig(), - 0, // initial paused status - operatorTableUpdaterInitParams.generator, - operatorTableUpdaterInitParams.globalRootConfirmationThreshold, - operatorTableUpdaterInitParams.generatorInfo - ) - ) - ); - - // TaskMailbox - we also initialize this contract - TaskMailboxInitParams memory taskMailboxInitParams = _getTaskMailboxInitParams(); - ITransparentUpgradeableProxy taskMailboxProxy = - ITransparentUpgradeableProxy(payable(address(Env.proxy.taskMailbox()))); - taskMailboxProxy.upgradeToAndCall( - address(Env.impl.taskMailbox()), - abi.encodeCall( - TaskMailbox.initialize, - ( - taskMailboxInitParams.owner, - taskMailboxInitParams.feeSplit, - taskMailboxInitParams.feeSplitCollector - ) - ) - ); - - - // Transfer proxy admin ownership - operatorTableUpdaterProxy.changeAdmin(Env.proxyAdmin()); - ecdsaCertificateVerifierProxy.changeAdmin(Env.proxyAdmin()); - bn254CertificateVerifierProxy.changeAdmin(Env.proxyAdmin()); - taskMailboxProxy.changeAdmin(Env.proxyAdmin()); - } - - function testScript() public virtual override { - if (!Env.isDestinationChain() || _isAlreadyDeployed()) { - return; - } - - // 1. Deploy the destination chain contracts - // If proxies are not deployed, deploy them - if (!_areProxiesDeployed()) { - DeployDestinationChainProxies._runAsMultisig(); - _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() - } else { - // Since the proxies are already deployed, we need to update the env with the proper addresses - _addContractsToEnv(); - } - - // 2. Deploy the destination chain impls - _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script - DeployDestinationChainImpls._runAsEOA(); - - // 3. Instantiate the destination chain proxies - execute(); - - // 4. Validate the destination chain - _validateStorage(); - _validateProxyAdmins(); - _validateProxyConstructors(); - _validateProxiesInitialized(); - } - - /// @dev Validate that storage variables are set correctly - function _validateStorage() internal view { - // Validate OperatorTableUpdater - { - OperatorTableUpdater operatorTableUpdater = Env.proxy.operatorTableUpdater(); - assertTrue(operatorTableUpdater.owner() == Env.opsMultisig(), "operatorTableUpdater.owner invalid"); - assertTrue(operatorTableUpdater.paused() == 0, "operatorTableUpdater.paused invalid"); - - // Checks on the generator - OperatorTableUpdaterInitParams memory initParams = _getTableUpdaterInitParams(); - OperatorSet memory generator = operatorTableUpdater.getGenerator(); - assertEq(generator.key(), initParams.generator.key(), "operatorTableUpdater.generator invalid"); - assertEq( - generator.avs, - _getGeneratorAddress(), // The generator is set to the ops multisig of the *source* chain, hence we cannot use Env.opsMultisig(). - "operatorTableUpdater.generator.avs invalid" - ); - assertEq( - generator.id, - 0, // The generator is set to 0 on initialization - "operatorTableUpdater.generator.id invalid" - ); - assertEq( - operatorTableUpdater.getGeneratorReferenceTimestamp(), - operatorTableUpdater.GENERATOR_REFERENCE_TIMESTAMP(), - "operatorTableUpdater.generatorReferenceTimestamp invalid" - ); - assertEq( - operatorTableUpdater.getGeneratorReferenceTimestamp(), - 1, - "operatorTableUpdater.generatorReferenceTimestamp invalid" - ); - assertEq( - operatorTableUpdater.getGlobalTableRootByTimestamp(1), - operatorTableUpdater.GENERATOR_GLOBAL_TABLE_ROOT(), - "operatorTableUpdater.generatorGlobalTableRoot invalid" - ); - // latestReferenceTimestamp is set to block.timestamp during initialization - assertTrue( - operatorTableUpdater.getLatestReferenceTimestamp() > 0, - "operatorTableUpdater.latestReferenceTimestamp should be > 0" - ); - assertTrue( - operatorTableUpdater.isRootValid(operatorTableUpdater.GENERATOR_GLOBAL_TABLE_ROOT()), - "operatorTableUpdater.generatorGlobalTableRoot invalid" - ); - assertTrue( - operatorTableUpdater.isRootValidByTimestamp(operatorTableUpdater.GENERATOR_REFERENCE_TIMESTAMP()), - "operatorTableUpdater.generatorGlobalTableRoot invalid" - ); - ICrossChainRegistryTypes.OperatorSetConfig memory generatorConfig = - operatorTableUpdater.getGeneratorConfig(); - assertEq(generatorConfig.maxStalenessPeriod, 0, "generatorConfig.maxStalenessPeriod invalid"); - assertEq(generatorConfig.owner, address(operatorTableUpdater), "generatorConfig.owner invalid"); - - // Check the global root confirmation threshold is 10000 - assertEq( - operatorTableUpdater.globalRootConfirmationThreshold(), - 10_000, - "operatorTableUpdater.globalRootConfirmationThreshold invalid" - ); - } - - // Validate ECDSACertificateVerifier - { - ECDSACertificateVerifier ecdsaCertificateVerifier = Env.proxy.ecdsaCertificateVerifier(); - assertTrue(address(ecdsaCertificateVerifier) != address(0), "ecdsaCertificateVerifier not deployed"); - } - - // Validate BN254CertificateVerifier - { - OperatorTableUpdaterInitParams memory initParams = _getTableUpdaterInitParams(); - BN254CertificateVerifier bn254CertificateVerifier = Env.proxy.bn254CertificateVerifier(); - assertTrue(address(bn254CertificateVerifier) != address(0), "bn254CertificateVerifier not deployed"); - - // Check the generator info - OperatorSet memory generator = initParams.generator; - assertEq( - bn254CertificateVerifier.latestReferenceTimestamp(generator), - 1, - "bn254CertificateVerifier.latestReferenceTimestamp invalid" - ); - IOperatorTableCalculatorTypes.BN254OperatorSetInfo memory generatorInfo = initParams.generatorInfo; - IOperatorTableCalculatorTypes.BN254OperatorSetInfo memory returnedGeneratorInfo = - bn254CertificateVerifier.getOperatorSetInfo(generator, 1); - assertEq( - returnedGeneratorInfo.operatorInfoTreeRoot, - generatorInfo.operatorInfoTreeRoot, - "bn254CertificateVerifier.operatorSetInfo.operatorInfoTreeRoot invalid" - ); - assertEq( - returnedGeneratorInfo.numOperators, - generatorInfo.numOperators, - "bn254CertificateVerifier.operatorSetInfo.numOperators invalid" - ); - assertEq( - returnedGeneratorInfo.aggregatePubkey.X, - generatorInfo.aggregatePubkey.X, - "bn254CertificateVerifier.operatorSetInfo.aggregatePubkey.X invalid" - ); - assertEq( - returnedGeneratorInfo.aggregatePubkey.Y, - generatorInfo.aggregatePubkey.Y, - "bn254CertificateVerifier.operatorSetInfo.aggregatePubkey.Y invalid" - ); - assertEq( - returnedGeneratorInfo.totalWeights.length, - generatorInfo.totalWeights.length, - "bn254CertificateVerifier.operatorSetInfo.totalWeights.length invalid" - ); - for (uint256 i = 0; i < returnedGeneratorInfo.totalWeights.length; i++) { - assertEq( - returnedGeneratorInfo.totalWeights[i], - generatorInfo.totalWeights[i], - "bn254CertificateVerifier.operatorSetInfo.totalWeights invalid" - ); - } - assertEq( - bn254CertificateVerifier.getOperatorSetOwner(generator), - address(Env.proxy.operatorTableUpdater()), // OperatorTableUpdater is the owner of the generator - "bn254CertificateVerifier.operatorSetOwner invalid" - ); - assertEq( - bn254CertificateVerifier.maxOperatorTableStaleness(generator), - 0, - "bn254CertificateVerifier.maxOperatorTableStaleness invalid" - ); - assertEq( - bn254CertificateVerifier.isReferenceTimestampSet(generator, 1), - true, - "bn254CertificateVerifier.isReferenceTimestampSet invalid" - ); - } - - // Validate TaskMailbox - { - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - TaskMailboxInitParams memory initParams = _getTaskMailboxInitParams(); - assertTrue(address(taskMailbox) != address(0), "taskMailbox not deployed"); - - assertTrue(taskMailbox.owner() == initParams.owner, "taskMailbox.owner invalid"); - assertEq(taskMailbox.feeSplit(), initParams.feeSplit, "taskMailbox.feeSplit invalid"); - assertTrue( - taskMailbox.feeSplitCollector() == initParams.feeSplitCollector, "taskMailbox.feeSplitCollector invalid" - ); - } - } - - /// @dev Ensure each deployed TUP/beacon is owned by the proxyAdmin/executorMultisig - function _validateProxyAdmins() internal view { - address pa = Env.proxyAdmin(); - - assertTrue( - Env._getProxyAdmin(address(Env.proxy.operatorTableUpdater())) == pa, - "operatorTableUpdater proxyAdmin incorrect" - ); - assertTrue( - Env._getProxyAdmin(address(Env.proxy.ecdsaCertificateVerifier())) == pa, - "ecdsaCertificateVerifier proxyAdmin incorrect" - ); - assertTrue( - Env._getProxyAdmin(address(Env.proxy.bn254CertificateVerifier())) == pa, - "bn254CertificateVerifier proxyAdmin incorrect" - ); - assertTrue(Env._getProxyAdmin(address(Env.proxy.taskMailbox())) == pa, "taskMailbox proxyAdmin incorrect"); - } - - function _validateProxyConstructors() internal view { - /// OperatorTableUpdater - { - OperatorTableUpdater operatorTableUpdater = Env.proxy.operatorTableUpdater(); - assertEq(operatorTableUpdater.version(), Env.deployVersion(), "operatorTableUpdater version mismatch"); - assertTrue( - operatorTableUpdater.bn254CertificateVerifier() == Env.proxy.bn254CertificateVerifier(), - "out.bn254CertificateVerifier mismatch" - ); - assertTrue( - operatorTableUpdater.ecdsaCertificateVerifier() == Env.proxy.ecdsaCertificateVerifier(), - "out.ecdsaCertificateVerifier mismatch" - ); - } - - /// ECDSACertificateVerifier - { - ECDSACertificateVerifier ecdsaCertificateVerifier = Env.proxy.ecdsaCertificateVerifier(); - assertEq( - ecdsaCertificateVerifier.version(), Env.deployVersion(), "ecdsaCertificateVerifier version mismatch" - ); - assertTrue( - ecdsaCertificateVerifier.operatorTableUpdater() == Env.proxy.operatorTableUpdater(), - "ecdsaCertificateVerifier operatorTableUpdater mismatch" - ); - } - - /// BN254CertificateVerifier - { - BN254CertificateVerifier bn254CertificateVerifier = Env.proxy.bn254CertificateVerifier(); - assertEq( - bn254CertificateVerifier.version(), Env.deployVersion(), "bn254CertificateVerifier version mismatch" - ); - assertTrue( - bn254CertificateVerifier.operatorTableUpdater() == Env.proxy.operatorTableUpdater(), - "bn254CertificateVerifier operatorTableUpdater mismatch" - ); - } - - /// TaskMailbox - { - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - assertEq(taskMailbox.version(), Env.deployVersion(), "taskMailbox version mismatch"); - assertTrue( - taskMailbox.BN254_CERTIFICATE_VERIFIER() == address(Env.proxy.bn254CertificateVerifier()), - "taskMailbox.BN254_CERTIFICATE_VERIFIER mismatch" - ); - assertTrue( - taskMailbox.ECDSA_CERTIFICATE_VERIFIER() == address(Env.proxy.ecdsaCertificateVerifier()), - "taskMailbox.ECDSA_CERTIFICATE_VERIFIER mismatch" - ); - assertEq(taskMailbox.MAX_TASK_SLA(), Env.MAX_TASK_SLA(), "taskMailbox.MAX_TASK_SLA mismatch"); - } - } - - function _validateProxiesInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - /// OperatorTableUpdater - dummy parameters - OperatorTableUpdater operatorTableUpdater = Env.proxy.operatorTableUpdater(); - OperatorSet memory dummyOperatorSet = OperatorSet({avs: address(0), id: 0}); - IOperatorTableCalculatorTypes.BN254OperatorSetInfo memory dummyBN254Info; - - vm.expectRevert(errInit); - operatorTableUpdater.initialize( - address(0), // owner - 0, // initial paused status - dummyOperatorSet, // generator - 0, // globalRootConfirmationThreshold - dummyBN254Info // generatorInfo - ); - - /// TaskMailbox - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - - vm.expectRevert(errInit); - taskMailbox.initialize( - address(0), // owner - 0, // feeSplit - address(0) // feeSplitCollector - ); - - // ECDSACertificateVerifier and BN254CertificateVerifier don't have initialize functions - } - - function _assertTrue(bool b, string memory err) private pure { - assertTrue(b, err); - } - - function _assertFalse(bool b, string memory err) private pure { - assertFalse(b, err); - } - - // In order to not clutter the Zeus Env, we define our operator table updater init params here - function _getTableUpdaterInitParams() internal view returns (OperatorTableUpdaterInitParams memory) { - OperatorTableUpdaterInitParams memory initParams; - - if (Env._strEq(Env.env(), "preprod")) { - initParams = _parseToml("script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/preprod.toml"); - } - // NOTE: For testnet-holesky and testnet-hoodi, the operator table updater is not used - else if (Env._strEq(Env.env(), "testnet-sepolia") || Env._strEq(Env.env(), "testnet-base-sepolia")) { - initParams = _parseToml("script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/testnet.toml"); - } else if (Env._strEq(Env.env(), "mainnet") || Env._strEq(Env.env(), "base")) { - initParams = _parseToml("script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/mainnet.toml"); - } - - return initParams; - } - - function _getGeneratorAddress() internal view returns (address generatorAddress) { - if (Env._strEq(Env.env(), "preprod")) { - generatorAddress = 0x6d609cD2812bDA02a75dcABa7DaafE4B20Ff5608; - } else if (Env._strEq(Env.env(), "testnet-sepolia") || Env._strEq(Env.env(), "testnet-base-sepolia")) { - generatorAddress = 0xb094Ba769b4976Dc37fC689A76675f31bc4923b0; - } else if (Env._strEq(Env.env(), "mainnet") || Env._strEq(Env.env(), "base")) { - generatorAddress = 0xBE1685C81aA44FF9FB319dD389addd9374383e90; - } - require(generatorAddress != address(0), "Invalid network"); - return generatorAddress; - } - - function _parseToml( - string memory path - ) internal view returns (OperatorTableUpdaterInitParams memory initParams) { - // Read the TOML file - string memory root = vm.projectRoot(); - string memory fullPath = string.concat(root, "/", path); - string memory toml = vm.readFile(fullPath); - - // Parse globalRootConfirmationThreshold - initParams.globalRootConfirmationThreshold = uint16(toml.readUint(".globalRootConfirmationThreshold")); - - // Parse generator - address avs = toml.readAddress(".generator.avs"); - uint32 id = uint32(toml.readUint(".generator.id")); - initParams.generator = OperatorSet({avs: avs, id: id}); - - // Parse generatorInfo - initParams.generatorInfo.numOperators = uint256(toml.readUint(".generatorInfo.numOperators")); - initParams.generatorInfo.operatorInfoTreeRoot = toml.readBytes32(".generatorInfo.operatorInfoTreeRoot"); - initParams.generatorInfo.totalWeights = toml.readUintArray(".generatorInfo.totalWeights"); - uint256 apkX = toml.readUint(".generatorInfo.aggregatePubkey.X"); - uint256 apkY = toml.readUint(".generatorInfo.aggregatePubkey.Y"); - initParams.generatorInfo.aggregatePubkey = BN254.G1Point({X: apkX, Y: apkY}); - - return initParams; - } - - struct OperatorTableUpdaterInitParams { - uint16 globalRootConfirmationThreshold; - OperatorSet generator; - IOperatorTableCalculatorTypes.BN254OperatorSetInfo generatorInfo; - } - - // Define TaskMailbox initialization parameters - function _getTaskMailboxInitParams() internal view returns (TaskMailboxInitParams memory) { - TaskMailboxInitParams memory initParams; - - initParams.owner = Env.opsMultisig(); - initParams.feeSplit = 0; // 0% fee split initially - initParams.feeSplitCollector = Env.opsMultisig(); // Initially set to opsMultisig - - return initParams; - } - - struct TaskMailboxInitParams { - address owner; - uint16 feeSplit; - address feeSplitCollector; - } -} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/5-configureCrossChainRegistry.s.sol b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/5-configureCrossChainRegistry.s.sol deleted file mode 100644 index 72c8bbcb9b..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/5-configureCrossChainRegistry.s.sol +++ /dev/null @@ -1,162 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {DeploySourceChain} from "./1-deploySourceChain.s.sol"; -import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; -import {DeployDestinationChainProxies} from "./2-deployDestinationChainProxies.s.sol"; -import "../Env.sol"; - -/** - * Purpose: Call the cross chain registry to configure chainIDs - */ -contract ConfigureCrossChainRegistry is DeploySourceChain, DeployDestinationChainProxies { - using Env for *; - - function _runAsMultisig() internal override prank(Env.opsMultisig()) { - // If we're not on a source chain or we're on a version that already has these contracts deployed, we don't need to run this - if (!Env.isSourceChain() || _isAlreadyDeployed()) { - return; - } - - // Update the call to the cross chain registry based on the environment - address operatorTableUpdater = address(Env.proxy.operatorTableUpdater()); - if (Env._strEq(Env.env(), "preprod")) { - _callPreprod(operatorTableUpdater); - } else if (Env._strEq(Env.env(), "testnet-sepolia")) { - _callTestnet(operatorTableUpdater); - } else if (Env._strEq(Env.env(), "mainnet")) { - _callMainnet(operatorTableUpdater); - } - } - - function testScript() public virtual override(DeploySourceChain, DeployDestinationChainProxies) { - if (!Env.isSourceChain() || _isAlreadyDeployed()) { - return; - } - - // Deploy source chain - _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script - DeploySourceChain._runAsEOA(); - - // Deploy destination chain - if (!_areProxiesDeployed()) { - DeployDestinationChainProxies._runAsMultisig(); - _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() - } else { - // Since the proxies are already deployed, we need to update the env with the proper addresses - _addContractsToEnv(); - } - - // Configure the registry - execute(); - - // Validate the registry - _validateRegistry(); - } - - function _validateRegistry() internal view { - (uint256[] memory chainIDs, address[] memory operatorTableUpdaters) = - Env.proxy.crossChainRegistry().getSupportedChains(); - - if (Env._strEq(Env.env(), "preprod")) { - // Preprod should have 1 chain: current chain - require(chainIDs.length == 1, "Invalid number of chains for preprod"); - require(chainIDs[0] == block.chainid, "Invalid chain ID for preprod"); - require( - operatorTableUpdaters[0] == address(Env.proxy.operatorTableUpdater()), - "Invalid operator table updater for preprod" - ); - } else if (Env._strEq(Env.env(), "testnet-sepolia")) { - // Testnet should have 2 chains: sepolia and base-sepolia - require(chainIDs.length == 2, "Invalid number of chains for testnet"); - - // Check both chains are present (order may vary) - bool hasSepoliaChain = false; - bool hasBaseSepolia = false; - - for (uint256 i = 0; i < chainIDs.length; i++) { - if (chainIDs[i] == block.chainid) { - hasSepoliaChain = true; - require( - operatorTableUpdaters[i] == address(Env.proxy.operatorTableUpdater()), - "Invalid operator table updater for sepolia" - ); - } else if (chainIDs[i] == 84_532) { - hasBaseSepolia = true; - require( - operatorTableUpdaters[i] == address(Env.proxy.operatorTableUpdater()), - "Invalid operator table updater for base-sepolia" - ); - } - } - - require(hasSepoliaChain && hasBaseSepolia, "Missing expected chains for testnet"); - } else if (Env._strEq(Env.env(), "mainnet")) { - // Mainnet should have 2 chains: mainnet and base - require(chainIDs.length == 2, "Invalid number of chains for mainnet"); - - // Check both chains are present (order may vary) - bool hasMainnetChain = false; - bool hasBase = false; - - for (uint256 i = 0; i < chainIDs.length; i++) { - if (chainIDs[i] == block.chainid) { - hasMainnetChain = true; - require( - operatorTableUpdaters[i] == address(Env.proxy.operatorTableUpdater()), - "Invalid operator table updater for mainnet" - ); - } else if (chainIDs[i] == 8453) { - hasBase = true; - require( - operatorTableUpdaters[i] == address(Env.proxy.operatorTableUpdater()), - "Invalid operator table updater for base" - ); - } - } - - require(hasMainnetChain && hasBase, "Missing expected chains for mainnet"); - } - } - - /// @dev On preprod, the source and destination chains are the same - function _callPreprod( - address operatorTableUpdater - ) internal { - uint256[] memory chainIDs = new uint256[](1); - address[] memory operatorTableUpdaters = new address[](1); - - chainIDs[0] = block.chainid; - operatorTableUpdaters[0] = operatorTableUpdater; - - Env.proxy.crossChainRegistry().addChainIDsToWhitelist(chainIDs, operatorTableUpdaters); - } - - function _callTestnet( - address operatorTableUpdater - ) internal { - uint256[] memory chainIDs = new uint256[](2); - address[] memory operatorTableUpdaters = new address[](2); - - chainIDs[0] = block.chainid; // sepolia - operatorTableUpdaters[0] = operatorTableUpdater; - chainIDs[1] = 84_532; // base-sepolia - operatorTableUpdaters[1] = operatorTableUpdater; - - Env.proxy.crossChainRegistry().addChainIDsToWhitelist(chainIDs, operatorTableUpdaters); - } - - function _callMainnet( - address operatorTableUpdater - ) internal { - uint256[] memory chainIDs = new uint256[](2); - address[] memory operatorTableUpdaters = new address[](2); - - chainIDs[0] = block.chainid; // mainnet - operatorTableUpdaters[0] = operatorTableUpdater; - chainIDs[1] = 8453; // base - operatorTableUpdaters[1] = operatorTableUpdater; - - Env.proxy.crossChainRegistry().addChainIDsToWhitelist(chainIDs, operatorTableUpdaters); - } -} diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/README.md b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/README.md deleted file mode 100644 index 234a395d8f..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# Global Confirmer Set Generation - -The `globalConfirmerRootSet`, also known as the `generator`, signs off on roots. In order to generate this operatorSet, we use the following [script](../../../deploy/multichain/deploy_generator.s.sol). The script outputs two items: - -1. `network.wallet.json`: Private keys and BLS sig info (should be kept secure) -2. `network.toml`: A toml file passed into initialization on `operatorTableUpdater` - -See our [docs](../../../../docs/multichain/) for more information. \ No newline at end of file diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/mainnet.toml b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/mainnet.toml deleted file mode 100644 index 13170b7638..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/mainnet.toml +++ /dev/null @@ -1,14 +0,0 @@ -globalRootConfirmationThreshold = 10000 - -[generator] -avs = "0xbe1685c81aa44ff9fb319dd389addd9374383e90" -id = 0 - -[generatorInfo] -numOperators = 1 -operatorInfoTreeRoot = "0xe2c9149bfefbe015c58bf88873e52d93d34e2df8004535dcefbfca6c843779cd" -totalWeights = [1] - -[generatorInfo.aggregatePubkey] -X = "8280017164165799357918870140210684221488553883939915125708733499123157732584" -Y = "14097679998808871693719250285544207136113257358514904577646642777851609871621" diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/preprod.toml b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/preprod.toml deleted file mode 100644 index 92816b9822..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/preprod.toml +++ /dev/null @@ -1,14 +0,0 @@ -globalRootConfirmationThreshold = 10000 - -[generator] -avs = "0x6d609cd2812bda02a75dcaba7daafe4b20ff5608" -id = 0 - -[generatorInfo] -numOperators = 1 -operatorInfoTreeRoot = "0x182ad7ebe0285e35fa1399b25265a3a7cf00bfbbee655c49c6e4a92eca8dc238" -totalWeights = [1] - -[generatorInfo.aggregatePubkey] -X = "2042332002447099671531219542053413553870364054171581230613284707326971991329" -Y = "4639211015708589911886198513998028007753137288206720998730367358833045516171" diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/testnet.toml b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/testnet.toml deleted file mode 100644 index 5abcca9415..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/configs/testnet.toml +++ /dev/null @@ -1,14 +0,0 @@ -globalRootConfirmationThreshold = 10000 - -[generator] -avs = "0xb094ba769b4976dc37fc689a76675f31bc4923b0" -id = 0 - -[generatorInfo] -numOperators = 1 -operatorInfoTreeRoot = "0x182ad7ebe0285e35fa1399b25265a3a7cf00bfbbee655c49c6e4a92eca8dc238" -totalWeights = [1] - -[generatorInfo.aggregatePubkey] -X = "2042332002447099671531219542053413553870364054171581230613284707326971991329" -Y = "4639211015708589911886198513998028007753137288206720998730367358833045516171" diff --git a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/upgrade.json b/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/upgrade.json deleted file mode 100644 index 6a7acaf9d5..0000000000 --- a/script/releases/v1.7.0-v1.8.0-multichain-hourglass-combined/upgrade.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "multichain-v1.7.0", - "from": ">=1.6.0 <1.7.0", - "to": "1.8.1", - "phases": [ - { - "type": "eoa", - "filename": "1-deploySourceChain.s.sol" - }, - { - "type": "multisig", - "filename": "2-deployDestinationChainProxies.s.sol" - }, - { - "type": "eoa", - "filename": "3-deployDestinationChainImpls.s.sol" - }, - { - "type": "multisig", - "filename": "4-instantiateDestinationChainProxies.s.sol" - }, - { - "type": "multisig", - "filename": "5-configureCrossChainRegistry.s.sol" - } - ] -} \ No newline at end of file diff --git a/script/releases/v1.8.1-hourglass-testnet-replay-fix/1-deployTaskMailboxImpl.s.sol b/script/releases/v1.8.1-hourglass-testnet-replay-fix/1-deployTaskMailboxImpl.s.sol deleted file mode 100644 index a4fa863721..0000000000 --- a/script/releases/v1.8.1-hourglass-testnet-replay-fix/1-deployTaskMailboxImpl.s.sol +++ /dev/null @@ -1,118 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; -import "../Env.sol"; - -/** - * @title DeployTaskMailboxImpl - * @notice Deploy new TaskMailbox implementation with task replay fix for destination chains. - * This fixes a vulnerability where certificates could be replayed across different tasks - * directed at the same operator set by including the taskHash in the messageHash. - */ -contract DeployTaskMailboxImpl is EOADeployer { - using Env for *; - - /// forgefmt: disable-next-item - function _runAsEOA() internal override { - // If we're not on a destination chain and not on version 1.8.0, we don't need to deploy any contracts - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - vm.startBroadcast(); - - // Deploy TaskMailbox implementation with the replay fix - deployImpl({ - name: type(TaskMailbox).name, - deployedTo: address( - new TaskMailbox({ - _bn254CertificateVerifier: address(Env.proxy.bn254CertificateVerifier()), - _ecdsaCertificateVerifier: address(Env.proxy.ecdsaCertificateVerifier()), - _maxTaskSLA: Env.MAX_TASK_SLA(), - _version: Env.deployVersion() - }) - ) - }); - - vm.stopBroadcast(); - } - - function testScript() public virtual { - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - // Deploy the new TaskMailbox implementation - runAsEOA(); - - _validateNewImplAddress(); - _validateProxyAdmin(); - _validateImplConstructor(); - _validateImplInitialized(); - _validateVersion(); - } - - /// @dev Validate that the new TaskMailbox impl address is distinct from the current one - function _validateNewImplAddress() internal view { - address currentImpl = Env._getProxyImpl(address(Env.proxy.taskMailbox())); - address newImpl = address(Env.impl.taskMailbox()); - - assertFalse(currentImpl == newImpl, "TaskMailbox impl should be different from current implementation"); - } - - /// @dev Validate that the TaskMailbox proxy is still owned by the correct ProxyAdmin - function _validateProxyAdmin() internal view { - address pa = Env.proxyAdmin(); - - assertTrue(Env._getProxyAdmin(address(Env.proxy.taskMailbox())) == pa, "TaskMailbox proxyAdmin incorrect"); - } - - /// @dev Validate the immutables set in the new TaskMailbox implementation constructor - function _validateImplConstructor() internal view { - TaskMailbox taskMailboxImpl = Env.impl.taskMailbox(); - - // Validate version - assertEq( - keccak256(bytes(taskMailboxImpl.version())), - keccak256(bytes(Env.deployVersion())), - "TaskMailbox impl version mismatch" - ); - - // Validate certificate verifiers - assertTrue( - taskMailboxImpl.BN254_CERTIFICATE_VERIFIER() == address(Env.proxy.bn254CertificateVerifier()), - "TaskMailbox BN254_CERTIFICATE_VERIFIER mismatch" - ); - assertTrue( - taskMailboxImpl.ECDSA_CERTIFICATE_VERIFIER() == address(Env.proxy.ecdsaCertificateVerifier()), - "TaskMailbox ECDSA_CERTIFICATE_VERIFIER mismatch" - ); - - // Validate MAX_TASK_SLA - assertEq(taskMailboxImpl.MAX_TASK_SLA(), Env.MAX_TASK_SLA(), "TaskMailbox MAX_TASK_SLA mismatch"); - } - - /// @dev Validate that the new implementation cannot be initialized (should revert) - function _validateImplInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - TaskMailbox taskMailboxImpl = Env.impl.taskMailbox(); - - vm.expectRevert(errInit); - taskMailboxImpl.initialize( - address(0), // owner - 0, // feeSplit - address(0) // feeSplitCollector - ); - } - - /// @dev Validate the version is correctly set - function _validateVersion() internal view { - assertEq( - keccak256(bytes(Env.impl.taskMailbox().version())), - keccak256(bytes(Env.deployVersion())), - "TaskMailbox version should match deploy version" - ); - } -} diff --git a/script/releases/v1.8.1-hourglass-testnet-replay-fix/2-queueTaskMailboxUpgrade.s.sol b/script/releases/v1.8.1-hourglass-testnet-replay-fix/2-queueTaskMailboxUpgrade.s.sol deleted file mode 100644 index 80bba7a02a..0000000000 --- a/script/releases/v1.8.1-hourglass-testnet-replay-fix/2-queueTaskMailboxUpgrade.s.sol +++ /dev/null @@ -1,92 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import {DeployTaskMailboxImpl} from "./1-deployTaskMailboxImpl.s.sol"; -import "../Env.sol"; - -import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; -import {MultisigCall, Encode} from "zeus-templates/utils/Encode.sol"; - -import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; - -/** - * @title QueueTaskMailboxUpgrade - * @notice Queue the TaskMailbox upgrade transaction in the Timelock via the Operations Multisig. - * This queues the upgrade to fix the task replay vulnerability. - */ -contract QueueTaskMailboxUpgrade is MultisigBuilder, DeployTaskMailboxImpl { - using Env for *; - using Encode for *; - - function _runAsMultisig() internal virtual override prank(Env.opsMultisig()) { - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - bytes memory calldata_to_executor = _getCalldataToExecutor(); - - TimelockController timelock = Env.timelockController(); - timelock.schedule({ - target: Env.executorMultisig(), - value: 0, - data: calldata_to_executor, - predecessor: 0, - salt: 0, - delay: timelock.getMinDelay() - }); - } - - /// @dev Get the calldata to be sent from the timelock to the executor - function _getCalldataToExecutor() internal returns (bytes memory) { - /// forgefmt: disable-next-item - MultisigCall[] storage executorCalls = Encode.newMultisigCalls().append({ - to: Env.proxyAdmin(), - data: Encode.proxyAdmin.upgrade({ - proxy: address(Env.proxy.taskMailbox()), - impl: address(Env.impl.taskMailbox()) - }) - }); - - return Encode.gnosisSafe.execTransaction({ - from: address(Env.timelockController()), - to: Env.multiSendCallOnly(), - op: Encode.Operation.DelegateCall, - data: Encode.multiSend(executorCalls) - }); - } - - function testScript() public virtual override { - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - // Deploy the new TaskMailbox implementation first - runAsEOA(); - - TimelockController timelock = Env.timelockController(); - bytes memory calldata_to_executor = _getCalldataToExecutor(); - bytes32 txHash = timelock.hashOperation({ - target: Env.executorMultisig(), - value: 0, - data: calldata_to_executor, - predecessor: 0, - salt: 0 - }); - - // Check that the upgrade does not exist in the timelock - assertFalse(timelock.isOperationPending(txHash), "Transaction should NOT be queued yet"); - - // Queue the upgrade - execute(); - - // Check that the upgrade has been added to the timelock - assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued"); - assertFalse(timelock.isOperationReady(txHash), "Transaction should NOT be ready immediately"); - assertFalse(timelock.isOperationDone(txHash), "Transaction should NOT be done"); - - // Validate that the TaskMailbox proxy still points to the old implementation - address currentImpl = Env._getProxyImpl(address(Env.proxy.taskMailbox())); - address newImpl = address(Env.impl.taskMailbox()); - assertFalse(currentImpl == newImpl, "TaskMailbox proxy should still point to old implementation"); - } -} diff --git a/script/releases/v1.8.1-hourglass-testnet-replay-fix/3-executeTaskMailboxUpgrade.s.sol b/script/releases/v1.8.1-hourglass-testnet-replay-fix/3-executeTaskMailboxUpgrade.s.sol deleted file mode 100644 index 92139ba38d..0000000000 --- a/script/releases/v1.8.1-hourglass-testnet-replay-fix/3-executeTaskMailboxUpgrade.s.sol +++ /dev/null @@ -1,150 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.12; - -import "../Env.sol"; -import {QueueTaskMailboxUpgrade} from "./2-queueTaskMailboxUpgrade.s.sol"; -import {Encode} from "zeus-templates/utils/Encode.sol"; - -/** - * @title ExecuteTaskMailboxUpgrade - * @notice Execute the queued TaskMailbox upgrade after the timelock delay. - * This completes the upgrade to fix the task replay vulnerability where certificates - * could be replayed across different tasks directed at the same operator set. - */ -contract ExecuteTaskMailboxUpgrade is QueueTaskMailboxUpgrade { - using Env for *; - using Encode for *; - - function _runAsMultisig() internal override prank(Env.protocolCouncilMultisig()) { - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - bytes memory calldata_to_executor = _getCalldataToExecutor(); - TimelockController timelock = Env.timelockController(); - - timelock.execute({ - target: Env.executorMultisig(), - value: 0, - payload: calldata_to_executor, - predecessor: 0, - salt: 0 - }); - } - - function testScript() public virtual override { - if (!(Env.isDestinationChain() && Env._strEq(Env.envVersion(), "1.8.0"))) { - return; - } - - // 1 - Deploy. The new TaskMailbox implementation has been deployed - runAsEOA(); - - TimelockController timelock = Env.timelockController(); - bytes memory calldata_to_executor = _getCalldataToExecutor(); - bytes32 txHash = timelock.hashOperation({ - target: Env.executorMultisig(), - value: 0, - data: calldata_to_executor, - predecessor: 0, - salt: 0 - }); - - // 2 - Queue. Check that the operation IS ready - QueueTaskMailboxUpgrade._runAsMultisig(); - _unsafeResetHasPranked(); // reset hasPranked so we can use it again - - assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued"); - assertFalse(timelock.isOperationReady(txHash), "Transaction should NOT be ready immediately"); - assertFalse(timelock.isOperationDone(txHash), "Transaction should NOT be complete"); - - // 3 - Warp past the timelock delay - vm.warp(block.timestamp + timelock.getMinDelay()); - assertTrue(timelock.isOperationReady(txHash), "Transaction should be ready for execution"); - - // 4 - Execute the upgrade - execute(); - assertTrue(timelock.isOperationDone(txHash), "v1.8.1 TaskMailbox upgrade should be complete"); - - // 5 - Validate the upgrade was successful - _validateUpgradeComplete(); - _validateProxyAdmin(); - _validateProxyConstructor(); - _validateProxyInitialized(); - _validateGetMessageHash(); - } - - /// @dev Validate that the TaskMailbox proxy now points to the new implementation - function _validateUpgradeComplete() internal view { - address currentImpl = Env._getProxyImpl(address(Env.proxy.taskMailbox())); - address expectedImpl = address(Env.impl.taskMailbox()); - - assertTrue(currentImpl == expectedImpl, "TaskMailbox proxy should point to new implementation"); - } - - /// @dev Validate the proxy's constructor values through the proxy - function _validateProxyConstructor() internal view { - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - - // Validate version - assertEq( - keccak256(bytes(taskMailbox.version())), - keccak256(bytes(Env.deployVersion())), - "TaskMailbox version mismatch" - ); - - // Validate certificate verifiers - assertTrue( - taskMailbox.BN254_CERTIFICATE_VERIFIER() == address(Env.proxy.bn254CertificateVerifier()), - "TaskMailbox BN254_CERTIFICATE_VERIFIER mismatch" - ); - assertTrue( - taskMailbox.ECDSA_CERTIFICATE_VERIFIER() == address(Env.proxy.ecdsaCertificateVerifier()), - "TaskMailbox ECDSA_CERTIFICATE_VERIFIER mismatch" - ); - - // Validate MAX_TASK_SLA - assertEq(taskMailbox.MAX_TASK_SLA(), Env.MAX_TASK_SLA(), "TaskMailbox MAX_TASK_SLA mismatch"); - } - - /// @dev Validate that the proxy cannot be re-initialized - function _validateProxyInitialized() internal { - bytes memory errInit = "Initializable: contract is already initialized"; - - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - - vm.expectRevert(errInit); - taskMailbox.initialize( - address(0), // owner - 0, // feeSplit - address(0) // feeSplitCollector - ); - } - - /// @dev Validate that the new getMessageHash function works correctly - function _validateGetMessageHash() internal view { - TaskMailbox taskMailbox = Env.proxy.taskMailbox(); - - // Test the new getMessageHash function with sample data - bytes32 taskHash = keccak256("test_task"); - bytes memory result = abi.encode("test_result"); - - // The new implementation should compute messageHash as keccak256(abi.encode(taskHash, result)) - bytes32 expectedMessageHash = keccak256(abi.encode(taskHash, result)); - bytes32 actualMessageHash = taskMailbox.getMessageHash(taskHash, result); - - assertTrue( - expectedMessageHash == actualMessageHash, - "getMessageHash should compute correct message hash with taskHash included" - ); - - // Verify that different tasks with same result produce different message hashes - bytes32 differentTaskHash = keccak256("different_task"); - bytes32 differentMessageHash = taskMailbox.getMessageHash(differentTaskHash, result); - - assertFalse( - actualMessageHash == differentMessageHash, - "Different tasks with same result should produce different message hashes" - ); - } -} diff --git a/script/releases/v1.8.1-hourglass-testnet-replay-fix/upgrade.json b/script/releases/v1.8.1-hourglass-testnet-replay-fix/upgrade.json deleted file mode 100644 index 565c726492..0000000000 --- a/script/releases/v1.8.1-hourglass-testnet-replay-fix/upgrade.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "hourglass-testnet-replay-fix-v1.8.1", - "from": "1.8.0", - "to": "1.8.1", - "phases": [ - { - "type": "eoa", - "filename": "1-deployTaskMailboxImpl.s.sol" - }, - { - "type": "multisig", - "filename": "2-queueTaskMailboxUpgrade.s.sol" - }, - { - "type": "multisig", - "filename": "3-executeTaskMailboxUpgrade.s.sol" - } - ] -} \ No newline at end of file diff --git a/script/releases/v1.9.0-slashing-ux-destination/1-deployProtocolRegistryProxy.s.sol b/script/releases/v1.9.0-slashing-ux-destination/1-deployProtocolRegistryProxy.s.sol new file mode 100644 index 0000000000..4fb0ffb6e8 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/1-deployProtocolRegistryProxy.s.sol @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import "../Env.sol"; +import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; + +/** + * Purpose: Deploy the Protocol Registry contract + */ +contract DeployProtocolRegistryProxy is MultisigBuilder { + using Env for *; + using CrosschainDeployLib for *; + + /// forgefmt: disable-next-item + function _runAsMultisig() internal virtual override { + // We don't use the prank modifier here, since we have to write to the env + _startPrank(Env.multichainDeployerMultisig()); + + // Deploy Protocol Registry Proxy + ITransparentUpgradeableProxy protocolRegistryProxy = CrosschainDeployLib.deployCrosschainProxy({ + implementation: address(Env.impl.emptyContract()), + adminAndDeployer: Env.multichainDeployerMultisig(), + name: type(ProtocolRegistry).name + }); + + // Stop pranking + _stopPrank(); + + // Save all the contracts to the env + _unsafeAddProxyContract(type(ProtocolRegistry).name, address(protocolRegistryProxy)); + } + + function testScript() public virtual { + if (Env.isCoreProtocolDeployed()) { + return; + } + + execute(); + + _validateProxyAdminIsMultisig(); + _validateExpectedProxyAddress(); + } + + /// @dev Validate that proxies are owned by the multichain deployer multisig (temporarily) + function _validateProxyAdminIsMultisig() internal view { + address multisig = Env.multichainDeployerMultisig(); + + assertTrue( + Env.getProxyAdminBySlot(address(Env.proxy.protocolRegistry())) == multisig, + "protocolRegistry proxyAdmin should be multisig" + ); + } + + /// @dev Validate that the expected proxy address is deployed + function _validateExpectedProxyAddress() internal view { + address expectedProxy = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + address actualProxy = address(Env.proxy.protocolRegistry()); + assertTrue(expectedProxy == actualProxy, "protocolRegistry proxy address mismatch"); + } + + /// @dev Check if the proxies are deployed by checking if the empty contract is deployed + function _areProxiesDeployed() internal view returns (bool) { + address expectedProtocolRegistry = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + + // If the empty contract is deployed, then the proxies are deployed + return expectedProtocolRegistry.code.length > 0; + } + + /// @dev Add the contracts to the env + function _addContractsToEnv() internal { + address expectedProtocolRegistry = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + _unsafeAddProxyContract(type(ProtocolRegistry).name, expectedProtocolRegistry); + } + + /// @dev Compute the expected proxy address for a given name and empty contract + function _computeExpectedProxyAddress(string memory name, address emptyContract) internal view returns (address) { + return CrosschainDeployLib.computeCrosschainUpgradeableProxyAddress({ + adminAndDeployer: Env.multichainDeployerMultisig(), + implementation: emptyContract, + name: name + }); + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/2-deployProtocolRegistryImpl.s.sol b/script/releases/v1.9.0-slashing-ux-destination/2-deployProtocolRegistryImpl.s.sol new file mode 100644 index 0000000000..1aa43c1d54 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/2-deployProtocolRegistryImpl.s.sol @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +/** + * Purpose: Deploy Protocol Registry implementation + */ +contract DeployProtocolRegistryImpl is DeployProtocolRegistryProxy, CoreContractsDeployer { + using Env for *; + + function _runAsEOA() internal virtual override { + vm.startBroadcast(); + + // Deploy Protocol Registry implementation + deployProtocolRegistry(); + + vm.stopBroadcast(); + } + + function testScript() public virtual override { + if (Env.isCoreProtocolDeployed()) { + return; + } + + // 1. Deploy Protocol Registry Proxy + // Only deploy the proxies if they haven't been deployed yet + /// @dev This is needed in the production environment tests since this step would fail if the proxies are already deployed + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy Implementation + runAsEOA(); + + // Validate the implementation + // Protocol Registry has no constructor, so we don't need to validate the immutables + TestUtils.validateProtocolRegistryInitialized(Env.impl.protocolRegistry()); + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/3-upgradeProtocolRegistry.s.sol b/script/releases/v1.9.0-slashing-ux-destination/3-upgradeProtocolRegistry.s.sol new file mode 100644 index 0000000000..fe82c3ddab --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/3-upgradeProtocolRegistry.s.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {DeployProtocolRegistryImpl} from "./2-deployProtocolRegistryImpl.s.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; + +import "../Env.sol"; +import "../TestUtils.sol"; + +/** + * Purpose: Upgrade Protocol Registry Proxy to point to the implementation. Also transfer control to the ProxyAdmin. + */ +contract UpgradeProtocolRegistry is DeployProtocolRegistryImpl { + using Env for *; + + /// forgefmt: disable-next-item + function _runAsMultisig() internal virtual override prank(Env.multichainDeployerMultisig()) { + // Upgrade the proxies to point to the actual implementations + ITransparentUpgradeableProxy protocolRegistryProxy = + ITransparentUpgradeableProxy(payable(address(Env.proxy.protocolRegistry()))); + protocolRegistryProxy.upgradeToAndCall(address(Env.impl.protocolRegistry()), abi.encodeWithSelector(ProtocolRegistry.initialize.selector, Env.executorMultisig(), Env.pauserMultisig())); + + // Transfer proxy admin ownership + protocolRegistryProxy.changeAdmin(Env.proxyAdmin()); + } + + function testScript() public virtual override { + if (Env.isCoreProtocolDeployed()) { + return; + } + // 1. Deploy the Protocol Registry Proxy + // If proxies are not deployed, deploy them + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy the Protocol Registry Implementation + _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script + DeployProtocolRegistryImpl._runAsEOA(); + + // 3. Upgrade the Protocol Registry Proxy + execute(); + + // 4. Validate the Protocol Registry + TestUtils.validateDestinationProxyAdmins(); + TestUtils.validateProtocolRegistryInitialized(Env.proxy.protocolRegistry()); + // ProtocolRegistry has no constructor, so we don't need to validate the constructors + // ProtocolRegistry has no initial storage, so we don't need to validate the storage + TestUtils.validateDestinationImplAddressesMatchProxy(); + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/4-deployCoreContracts.s.sol b/script/releases/v1.9.0-slashing-ux-destination/4-deployCoreContracts.s.sol new file mode 100644 index 0000000000..826ef3e331 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/4-deployCoreContracts.s.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {DeployProtocolRegistryImpl} from "./2-deployProtocolRegistryImpl.s.sol"; +import {UpgradeProtocolRegistry} from "./3-upgradeProtocolRegistry.s.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/** + * Purpose: use an EOA to deploy all of the new contracts for this upgrade. + * Contracts deployed: + * /// Multichain + * - BN254CertificateVerifier + * - CrossChainRegistry + * - ECDSACertificateVerifier + * - OperatorTableUpdater + * /// AVS + * - TaskMailbox + */ +contract DeployCoreContracts is UpgradeProtocolRegistry { + using Env for *; + + function _runAsEOA() internal override { + vm.startBroadcast(); + + /** + * multichain/ + */ + deployBN254CertificateVerifier(); + // CrossChainRegistry only deployed on destination chain + deployECDSACertificateVerifier(); + deployOperatorTableUpdater(); + + /** + * avs/ + */ + deployTaskMailbox(); + + vm.stopBroadcast(); + } + + function testScript() public virtual override { + if (Env.isCoreProtocolDeployed()) { + return; + } + + // Deploy protocol registry and initialize it + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + runAsEOA(); + + // Run tests + TestUtils.validateDestinationProxyAdmins(); + TestUtils.validateDestinationImplConstructors(); + TestUtils.validateDestinationImplsNotInitializable(); + + // Check individual version addresses + TestUtils.validateECDSACertificateVerifierVersion(); + } + + function _completeProtocolRegistryUpgrade() internal { + // If proxies are not deployed, deploy them + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy the Protocol Registry Implementation + _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script + DeployProtocolRegistryImpl._runAsEOA(); + + // 3. Upgrade the Protocol Registry Proxy, only if the admin is not already the proxyAdmin + if (Env.getProxyAdminBySlot(address(Env.proxy.protocolRegistry())) != Env.proxyAdmin()) { + UpgradeProtocolRegistry._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use in the future + } + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/5-queueUpgrade.s.sol b/script/releases/v1.9.0-slashing-ux-destination/5-queueUpgrade.s.sol new file mode 100644 index 0000000000..5ec1831200 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/5-queueUpgrade.s.sol @@ -0,0 +1,144 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {UpgradeProtocolRegistry} from "./3-upgradeProtocolRegistry.s.sol"; +import {DeployCoreContracts} from "./4-deployCoreContracts.s.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {Encode, MultisigCall} from "zeus-templates/utils/Encode.sol"; +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; +import {CoreUpgradeQueueBuilder} from "../CoreUpgradeQueueBuilder.sol"; +import {IProtocolRegistryTypes} from "src/contracts/interfaces/IProtocolRegistry.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +contract QueueUpgrade is DeployCoreContracts { + using Env for *; + using Encode for *; + using CoreUpgradeQueueBuilder for MultisigCall[]; + + function _runAsMultisig() internal virtual override prank(Env.opsMultisig()) { + bytes memory calldata_to_executor = _getCalldataToExecutor(); + + TimelockController timelock = Env.timelockController(); + timelock.schedule({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0, + delay: timelock.getMinDelay() + }); + + // Add the protocol registry as a pauser to the pauser registry + Env.impl.pauserRegistry().setIsPauser(address(Env.proxy.protocolRegistry()), true); + } + + function _getCalldataToExecutor() internal returns (bytes memory) { + MultisigCall[] storage executorCalls = Encode.newMultisigCalls(); + + /// multichain + executorCalls.upgradeBN254CertificateVerifier(); + executorCalls.upgradeECDSACertificateVerifier(); + executorCalls.upgradeOperatorTableUpdater(); + + /// avs + executorCalls.upgradeTaskMailbox(); + + // Add the protocol registry upgrade to the executor calls + _appendProtocolRegistryUpgrade(executorCalls); + + return Encode.gnosisSafe.execTransaction({ + from: address(Env.timelockController()), + to: Env.multiSendCallOnly(), + op: Encode.Operation.DelegateCall, + data: Encode.multiSend(executorCalls) + }); + } + + function _appendProtocolRegistryUpgrade( + MultisigCall[] storage calls + ) internal { + // We want to add all addresses that are deployed to the protocol registry + address[] memory addresses = new address[](6); + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](6); + string[] memory names = new string[](6); + + IProtocolRegistryTypes.DeploymentConfig memory pausableConfig = + IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + IProtocolRegistryTypes.DeploymentConfig memory unpausableConfig = + IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + + /** + * permissions/ + */ + addresses[0] = address(Env.impl.pauserRegistry()); + configs[0] = unpausableConfig; + names[0] = type(PauserRegistry).name; + + /** + * core/ + */ + addresses[1] = address(Env.proxy.protocolRegistry()); + configs[1] = unpausableConfig; + names[1] = type(ProtocolRegistry).name; + + /** + * multichain/ + */ + addresses[2] = address(Env.proxy.bn254CertificateVerifier()); + configs[2] = unpausableConfig; + names[2] = type(BN254CertificateVerifier).name; + + addresses[3] = address(Env.proxy.ecdsaCertificateVerifier()); + configs[3] = unpausableConfig; + names[3] = type(ECDSACertificateVerifier).name; + + addresses[4] = address(Env.proxy.operatorTableUpdater()); + configs[4] = pausableConfig; + names[4] = type(OperatorTableUpdater).name; + + /** + * avs/ + */ + addresses[5] = address(Env.proxy.taskMailbox()); + configs[5] = unpausableConfig; + names[5] = type(TaskMailbox).name; + + // Lastly, append to the multisig calls + calls.append({ + to: address(Env.proxy.protocolRegistry()), + data: abi.encodeWithSelector(IProtocolRegistry.ship.selector, addresses, configs, names, Env.deployVersion()) + }); + } + + function testScript() public virtual override { + if (Env.isCoreProtocolDeployed()) { + return; + } + + // Complete previous steps + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + super.runAsEOA(); + + TimelockController timelock = Env.timelockController(); + bytes memory calldata_to_executor = _getCalldataToExecutor(); + bytes32 txHash = timelock.hashOperation({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + + // Check that the upgrade does not exist in the timelock + assertFalse(timelock.isOperationPending(txHash), "Transaction should NOT be queued."); + + execute(); + + // Check that the upgrade has been added to the timelock + assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued."); + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/6-completeUpgrade.s.sol b/script/releases/v1.9.0-slashing-ux-destination/6-completeUpgrade.s.sol new file mode 100644 index 0000000000..af04bda987 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/6-completeUpgrade.s.sol @@ -0,0 +1,72 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {QueueUpgrade} from "./5-queueUpgrade.s.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {Encode, MultisigCall} from "zeus-templates/utils/Encode.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +contract ExecuteUpgrade is QueueUpgrade { + using Env for *; + + function _runAsMultisig() internal virtual override prank(Env.protocolCouncilMultisig()) { + bytes memory calldata_to_executor = _getCalldataToExecutor(); + + TimelockController timelock = Env.timelockController(); + timelock.execute({ + target: Env.executorMultisig(), + value: 0, + payload: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + } + + function testScript() public virtual override { + if (Env.isCoreProtocolDeployed()) { + return; + } + + // Complete previous steps + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + super.runAsEOA(); + + // Queue the upgrade + TimelockController timelock = Env.timelockController(); + bytes memory calldata_to_executor = _getCalldataToExecutor(); + bytes32 txHash = timelock.hashOperation({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + + assertFalse(timelock.isOperationPending(txHash), "Transaction should NOT be queued."); + QueueUpgrade._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it again + + assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued."); + assertFalse(timelock.isOperationReady(txHash), "Transaction should NOT be ready for execution."); + assertFalse(timelock.isOperationDone(txHash), "Transaction should NOT be complete."); + + // Warp Past delay + vm.warp(block.timestamp + timelock.getMinDelay()); // 1 tick after ETA + assertEq(timelock.isOperationReady(txHash), true, "Transaction should be executable."); + + // Execute + execute(); + + // Run Tests + TestUtils.validateDestinationProxyAdmins(); + TestUtils.validateDestinationProxyConstructors(); + TestUtils.validateDestinationProxiesAlreadyInitialized(); + TestUtils.validateDestinationProxyStorage(); + TestUtils.validateDestinationImplAddressesMatchProxy(); + TestUtils.validateDestinationProtocolRegistry(); + } +} diff --git a/script/releases/v1.9.0-slashing-ux-destination/upgrade.json b/script/releases/v1.9.0-slashing-ux-destination/upgrade.json new file mode 100644 index 0000000000..ea957cc5ab --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux-destination/upgrade.json @@ -0,0 +1,31 @@ +{ + "name": "slashing-ux-improvements", + "from": ">=1.8.0", + "to": "1.9.0", + "phases": [ + { + "type": "multisig", + "filename": "1-deployProtocolRegistryProxy.s.sol" + }, + { + "type": "eoa", + "filename": "2-deployProtocolRegistryImpl.s.sol" + }, + { + "type": "multisig", + "filename": "3-upgradeProtocolRegistry.s.sol" + }, + { + "type": "eoa", + "filename": "4-deployCoreContracts.s.sol" + }, + { + "type": "multisig", + "filename": "5-queueUpgrade.s.sol" + }, + { + "type": "multisig", + "filename": "6-completeUpgrade.s.sol" + } + ] +} \ No newline at end of file diff --git a/script/releases/v1.9.0-slashing-ux/1-deployProtocolRegistryProxy.s.sol b/script/releases/v1.9.0-slashing-ux/1-deployProtocolRegistryProxy.s.sol new file mode 100644 index 0000000000..8599c13291 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/1-deployProtocolRegistryProxy.s.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import "../Env.sol"; +import {CrosschainDeployLib} from "script/releases/CrosschainDeployLib.sol"; + +/** + * Purpose: Deploy the Protocol Registry contract + */ +contract DeployProtocolRegistryProxy is MultisigBuilder { + using Env for *; + using CrosschainDeployLib for *; + + /// forgefmt: disable-next-item + function _runAsMultisig() internal virtual override { + // We don't use the prank modifier here, since we have to write to the env + _startPrank(Env.multichainDeployerMultisig()); + + // Deploy Protocol Registry Proxy + ITransparentUpgradeableProxy protocolRegistryProxy = CrosschainDeployLib.deployCrosschainProxy({ + implementation: address(Env.impl.emptyContract()), + adminAndDeployer: Env.multichainDeployerMultisig(), + name: type(ProtocolRegistry).name + }); + + // Stop pranking + _stopPrank(); + + // Save all the contracts to the env + _unsafeAddProxyContract(type(ProtocolRegistry).name, address(protocolRegistryProxy)); + } + + function testScript() public virtual { + if (!Env.isCoreProtocolDeployed() || _areProxiesDeployed()) { + return; + } + execute(); + + _validateProxyAdminIsMultisig(); + _validateExpectedProxyAddress(); + } + + /// @dev Validate that proxies are owned by the multichain deployer multisig (temporarily) + function _validateProxyAdminIsMultisig() internal view { + address multisig = Env.multichainDeployerMultisig(); + + assertTrue( + Env.getProxyAdminBySlot(address(Env.proxy.protocolRegistry())) == multisig, + "protocolRegistry proxyAdmin should be multisig" + ); + } + + /// @dev Validate that the expected proxy address is deployed + function _validateExpectedProxyAddress() internal view { + address expectedProxy = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + address actualProxy = address(Env.proxy.protocolRegistry()); + assertTrue(expectedProxy == actualProxy, "protocolRegistry proxy address mismatch"); + } + + /// @dev Check if the proxies are deployed by checking if the empty contract is deployed + function _areProxiesDeployed() internal view returns (bool) { + address expectedProtocolRegistry = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + + // If the empty contract is deployed, then the proxies are deployed + return expectedProtocolRegistry.code.length > 0; + } + + /// @dev Add the contracts to the env + function _addContractsToEnv() internal { + address expectedProtocolRegistry = + _computeExpectedProxyAddress(type(ProtocolRegistry).name, address(Env.impl.emptyContract())); + _unsafeAddProxyContract(type(ProtocolRegistry).name, expectedProtocolRegistry); + } + + /// @dev Compute the expected proxy address for a given name and empty contract + function _computeExpectedProxyAddress(string memory name, address emptyContract) internal view returns (address) { + return CrosschainDeployLib.computeCrosschainUpgradeableProxyAddress({ + adminAndDeployer: Env.multichainDeployerMultisig(), + implementation: emptyContract, + name: name + }); + } +} diff --git a/script/releases/v1.9.0-slashing-ux/2-deployProtocolRegistryImpl.s.sol b/script/releases/v1.9.0-slashing-ux/2-deployProtocolRegistryImpl.s.sol new file mode 100644 index 0000000000..2c0480ade6 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/2-deployProtocolRegistryImpl.s.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +/** + * Purpose: Deploy Protocol Registry implementation + */ +contract DeployProtocolRegistryImpl is DeployProtocolRegistryProxy, CoreContractsDeployer { + using Env for *; + + function _runAsEOA() internal virtual override { + vm.startBroadcast(); + + // Deploy Protocol Registry implementation + deployProtocolRegistry(); + + vm.stopBroadcast(); + } + + function testScript() public virtual override { + if (!Env.isCoreProtocolDeployed()) { + return; + } + // 1. Deploy Protocol Registry Proxy + // Only deploy the proxies if they haven't been deployed yet + /// @dev This is needed in the production environment tests since this step would fail if the proxies are already deployed + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy Implementation + runAsEOA(); + + // Validate the implementation + // Protocol Registry has no constructor, so we don't need to validate the immutables + TestUtils.validateProtocolRegistryInitialized(Env.impl.protocolRegistry()); + } +} diff --git a/script/releases/v1.9.0-slashing-ux/3-upgradeProtocolRegistry.s.sol b/script/releases/v1.9.0-slashing-ux/3-upgradeProtocolRegistry.s.sol new file mode 100644 index 0000000000..d1cbe0bb1d --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/3-upgradeProtocolRegistry.s.sol @@ -0,0 +1,63 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {DeployProtocolRegistryImpl} from "./2-deployProtocolRegistryImpl.s.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; + +import "../Env.sol"; +import "../TestUtils.sol"; + +/** + * Purpose: Upgrade Protocol Registry Proxy to point to the implementation. Also transfer control to the ProxyAdmin. + */ +contract UpgradeProtocolRegistry is DeployProtocolRegistryImpl { + using Env for *; + + /// forgefmt: disable-next-item + function _runAsMultisig() internal virtual override prank(Env.multichainDeployerMultisig()) { + // Upgrade the proxies to point to the actual implementations + ITransparentUpgradeableProxy protocolRegistryProxy = + ITransparentUpgradeableProxy(payable(address(Env.proxy.protocolRegistry()))); + protocolRegistryProxy.upgradeToAndCall(address(Env.impl.protocolRegistry()), abi.encodeWithSelector(ProtocolRegistry.initialize.selector, Env.executorMultisig(), Env.pauserMultisig())); + + // Transfer proxy admin ownership + protocolRegistryProxy.changeAdmin(Env.proxyAdmin()); + } + + function testScript() public virtual override { + if ( + !Env.isCoreProtocolDeployed() + || ( + _areProxiesDeployed() + && Env.getProxyAdminBySlot(address(Env.proxy.protocolRegistry())) == Env.proxyAdmin() + ) + ) { + return; + } + // 1. Deploy the Protocol Registry Proxy + // If proxies are not deployed, deploy them + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy the Protocol Registry Implementation + _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script + DeployProtocolRegistryImpl._runAsEOA(); + + // 3. Upgrade the Protocol Registry Proxy + execute(); + + // 4. Validate the Protocol Registry + TestUtils.validateDestinationProxyAdmins(); + TestUtils.validateProtocolRegistryInitialized(Env.proxy.protocolRegistry()); + // ProtocolRegistry has no constructor, so we don't need to validate the constructors + // ProtocolRegistry has no initial storage, so we don't need to validate the storage + TestUtils.validateDestinationImplAddressesMatchProxy(); + } +} diff --git a/script/releases/v1.9.0-slashing-ux/4-deployCoreContracts.s.sol b/script/releases/v1.9.0-slashing-ux/4-deployCoreContracts.s.sol new file mode 100644 index 0000000000..a95c388d21 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/4-deployCoreContracts.s.sol @@ -0,0 +1,142 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {CoreContractsDeployer} from "../CoreContractsDeployer.sol"; +import {DeployProtocolRegistryProxy} from "./1-deployProtocolRegistryProxy.s.sol"; +import {DeployProtocolRegistryImpl} from "./2-deployProtocolRegistryImpl.s.sol"; +import {UpgradeProtocolRegistry} from "./3-upgradeProtocolRegistry.s.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; + +/** + * Purpose: use an EOA to deploy all of the new contracts for this upgrade. + * Contracts deployed: + * /// Permissions + * - PermissionController + * - KeyRegistrar + * /// Core + * - AllocationManager + * - AVSDirectory + * - DelegationManager + * - ReleaseManager + * - RewardsCoordinator + * - StrategyManager + * /// Pods + * - EigenPod + * - EigenPodManager + * /// Strategies + * - EigenStrategy + * - StrategyBase + * - StrategyBaseTVLLimits + * - StrategyFactory + * /// Multichain + * - BN254CertificateVerifier + * - CrossChainRegistry + * - ECDSACertificateVerifier + * - OperatorTableUpdater + * /// AVS + * - TaskMailbox + */ +contract DeployCoreContracts is UpgradeProtocolRegistry { + using Env for *; + + function _runAsEOA() internal override { + vm.startBroadcast(); + + /** + * pemissions/ + */ + deployPermissionController(); + deployKeyRegistrar(); + + /** + * core/ + */ + deployAllocationManagerView(); + deployAllocationManager(); + deployAVSDirectory(); + deployDelegationManager(); + // Protocol registry was deployed in the previous step + deployReleaseManager(); + deployRewardsCoordinator(); + deployStrategyManager(); + + /** + * pods/ + */ + deployEigenPodManager(); + deployEigenPod(); + + /** + * strategies/ + */ + deployEigenStrategy(); + deployStrategyBase(); + deployStrategyBaseTVLLimits(); + deployStrategyFactory(); + + /** + * multichain/ + */ + deployBN254CertificateVerifier(); + deployCrossChainRegistry(); + deployECDSACertificateVerifier(); + deployOperatorTableUpdater(); + + /** + * avs/ + */ + deployTaskMailbox(); + + vm.stopBroadcast(); + } + + function testScript() public virtual override { + if (!Env.isCoreProtocolDeployed()) { + return; + } + // Deploy protocol registry and initialize it + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + runAsEOA(); + + // Run tests + TestUtils.validateProxyAdmins(); + TestUtils.validateImplConstructors(); + TestUtils.validateImplsNotInitializable(); + + // Check individual version addresses + TestUtils.validateKeyRegistrarVersion(); + TestUtils.validateAVSDirectoryVersion(); + TestUtils.validateDelegationManagerVersion(); + TestUtils.validateStrategyManagerVersion(); + TestUtils.validateECDSACertificateVerifierVersion(); + } + + function _completeProtocolRegistryUpgrade() internal { + // If proxies are not deployed, deploy them + if (!_areProxiesDeployed()) { + DeployProtocolRegistryProxy._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it in the execute() + } else { + // Since the proxies are already deployed, we need to update the env with the proper addresses + _addContractsToEnv(); + } + + // 2. Deploy the Protocol Registry Implementation + _mode = OperationalMode.EOA; // Set to EOA mode so we can deploy the impls in the EOA script + DeployProtocolRegistryImpl._runAsEOA(); + + // 3. Upgrade the Protocol Registry Proxy, only if the admin is not already the proxyAdmin + if (Env.getProxyAdminBySlot(address(Env.proxy.protocolRegistry())) != Env.proxyAdmin()) { + UpgradeProtocolRegistry._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use in the future + } + } +} diff --git a/script/releases/v1.9.0-slashing-ux/5-queueUpgrade.s.sol b/script/releases/v1.9.0-slashing-ux/5-queueUpgrade.s.sol new file mode 100644 index 0000000000..9b105db45f --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/5-queueUpgrade.s.sol @@ -0,0 +1,264 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {UpgradeProtocolRegistry} from "./3-upgradeProtocolRegistry.s.sol"; +import {DeployCoreContracts} from "./4-deployCoreContracts.s.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {Encode, MultisigCall} from "zeus-templates/utils/Encode.sol"; +import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; +import {CoreUpgradeQueueBuilder} from "../CoreUpgradeQueueBuilder.sol"; +import {IProtocolRegistryTypes} from "src/contracts/interfaces/IProtocolRegistry.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +contract QueueUpgrade is DeployCoreContracts { + using Env for *; + using Encode for *; + using CoreUpgradeQueueBuilder for MultisigCall[]; + + function _runAsMultisig() internal virtual override prank(Env.opsMultisig()) { + bytes memory calldata_to_executor = _getCalldataToExecutor(); + + TimelockController timelock = Env.timelockController(); + timelock.schedule({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0, + delay: timelock.getMinDelay() + }); + } + + function _getCalldataToExecutor() internal returns (bytes memory) { + MultisigCall[] storage executorCalls = Encode.newMultisigCalls(); + + /// permissions + executorCalls.upgradePermissionController(); + executorCalls.upgradeKeyRegistrar(); + + /// core + executorCalls.upgradeAllocationManager(); + executorCalls.upgradeAVSDirectory(); + executorCalls.upgradeDelegationManager(); + // protocol registry was deployed in the previous step + executorCalls.upgradeReleaseManager(); + executorCalls.upgradeRewardsCoordinator(); + executorCalls.upgradeStrategyManager(); + + /// pods + executorCalls.upgradeEigenPodManager(); + executorCalls.upgradeEigenPod(); + + /// strategies + executorCalls.upgradeEigenStrategy(); + executorCalls.upgradeStrategyBase(); + executorCalls.upgradeStrategyBaseTVLLimits(); + executorCalls.upgradeStrategyFactory(); + + /// multichain + executorCalls.upgradeBN254CertificateVerifier(); + executorCalls.upgradeCrossChainRegistry(); + executorCalls.upgradeECDSACertificateVerifier(); + executorCalls.upgradeOperatorTableUpdater(); + + /// avs + executorCalls.upgradeTaskMailbox(); + + // Add the protocol registry upgrade to the executor calls + _appendProtocolRegistryUpgrade(executorCalls); + + // Lastly, add the protocol registry as a pauser to the pauser registry + executorCalls.append({ + to: address(Env.impl.pauserRegistry()), + data: abi.encodeWithSelector(PauserRegistry.setIsPauser.selector, address(Env.proxy.protocolRegistry()), true) + }); + + return Encode.gnosisSafe.execTransaction({ + from: address(Env.timelockController()), + to: Env.multiSendCallOnly(), + op: Encode.Operation.DelegateCall, + data: Encode.multiSend(executorCalls) + }); + } + + function _appendProtocolRegistryUpgrade( + MultisigCall[] storage calls + ) internal { + // We want to add all addresses that are deployed to the protocol registry + address[] memory addresses = new address[](22); + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](22); + string[] memory names = new string[](22); + + IProtocolRegistryTypes.DeploymentConfig memory pausableConfig = + IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + IProtocolRegistryTypes.DeploymentConfig memory unpausableConfig = + IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + + /** + * permissions/ + */ + addresses[0] = address(Env.impl.pauserRegistry()); + configs[0] = unpausableConfig; + names[0] = type(PauserRegistry).name; + + addresses[1] = address(Env.proxy.permissionController()); + configs[1] = unpausableConfig; + names[1] = type(PermissionController).name; + + addresses[2] = address(Env.proxy.keyRegistrar()); + configs[2] = unpausableConfig; + names[2] = type(KeyRegistrar).name; + + /** + * core/ + */ + addresses[3] = address(Env.proxy.allocationManager()); + configs[3] = pausableConfig; + names[3] = type(AllocationManager).name; + + addresses[4] = address(Env.proxy.avsDirectory()); + configs[4] = pausableConfig; + names[4] = type(AVSDirectory).name; + + addresses[5] = address(Env.proxy.delegationManager()); + configs[5] = pausableConfig; + names[5] = type(DelegationManager).name; + + addresses[6] = address(Env.proxy.protocolRegistry()); + configs[6] = unpausableConfig; + names[6] = type(ProtocolRegistry).name; + + addresses[7] = address(Env.proxy.releaseManager()); + configs[7] = unpausableConfig; + names[7] = type(ReleaseManager).name; + + addresses[8] = address(Env.proxy.rewardsCoordinator()); + configs[8] = pausableConfig; + names[8] = type(RewardsCoordinator).name; + + addresses[9] = address(Env.proxy.strategyManager()); + configs[9] = pausableConfig; + names[9] = type(StrategyManager).name; + + /** + * pods/ + */ + addresses[10] = address(Env.proxy.eigenPodManager()); + configs[10] = pausableConfig; + names[10] = type(EigenPodManager).name; + + addresses[11] = address(Env.beacon.eigenPod()); + configs[11] = unpausableConfig; + names[11] = type(EigenPod).name; + + /** + * strategies/ + */ + addresses[12] = address(Env.proxy.eigenStrategy()); + configs[12] = pausableConfig; + names[12] = type(EigenStrategy).name; + + addresses[13] = address(Env.beacon.strategyBase()); + configs[13] = unpausableConfig; + names[13] = type(StrategyBase).name; + + addresses[14] = address(Env.proxy.strategyFactory()); + configs[14] = pausableConfig; + names[14] = type(StrategyFactory).name; + + /** + * multichain/ + */ + addresses[15] = address(Env.proxy.bn254CertificateVerifier()); + configs[15] = unpausableConfig; + names[15] = type(BN254CertificateVerifier).name; + + addresses[16] = address(Env.proxy.crossChainRegistry()); + configs[16] = pausableConfig; + names[16] = type(CrossChainRegistry).name; + + addresses[17] = address(Env.proxy.ecdsaCertificateVerifier()); + configs[17] = unpausableConfig; + names[17] = type(ECDSACertificateVerifier).name; + + addresses[18] = address(Env.proxy.operatorTableUpdater()); + configs[18] = pausableConfig; + names[18] = type(OperatorTableUpdater).name; + + /** + * avs/ + */ + addresses[19] = address(Env.proxy.taskMailbox()); + configs[19] = unpausableConfig; + names[19] = type(TaskMailbox).name; + + /** + * token + */ + addresses[20] = address(Env.proxy.beigen()); + configs[20] = unpausableConfig; + names[20] = type(BackingEigen).name; + + addresses[21] = address(Env.proxy.eigen()); + configs[21] = unpausableConfig; + names[21] = type(Eigen).name; + + // Append to the multisig calls + calls.append({ + to: address(Env.proxy.protocolRegistry()), + data: abi.encodeWithSelector(IProtocolRegistry.ship.selector, addresses, configs, names, Env.deployVersion()) + }); + + // Now, if we have any strategy base TVLLimits, we need to add them to the protocol registry + uint256 count = Env.instance.strategyBaseTVLLimits_Count(); + if (count > 0) { + address[] memory strategyAddresses = new address[](count); + IProtocolRegistryTypes.DeploymentConfig[] memory strategyConfigs = + new IProtocolRegistryTypes.DeploymentConfig[](count); + string[] memory strategyNames = new string[](count); + for (uint256 i = 0; i < count; i++) { + strategyAddresses[i] = address(Env.instance.strategyBaseTVLLimits(i)); + strategyConfigs[i] = pausableConfig; + strategyNames[i] = string.concat(type(StrategyBaseTVLLimits).name, "_", Strings.toString(i)); + } + + calls.append({ + to: address(Env.proxy.protocolRegistry()), + data: abi.encodeWithSelector( + IProtocolRegistry.ship.selector, strategyAddresses, strategyConfigs, strategyNames, Env.deployVersion() + ) + }); + } + } + + function testScript() public virtual override { + if (!Env.isCoreProtocolDeployed()) { + return; + } + // Complete previous steps + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + super.runAsEOA(); + + TimelockController timelock = Env.timelockController(); + bytes memory calldata_to_executor = _getCalldataToExecutor(); + bytes32 txHash = timelock.hashOperation({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + + // Check that the upgrade does not exist in the timelock + assertFalse(timelock.isOperationPending(txHash), "Transaction should NOT be queued."); + + execute(); + + // Check that the upgrade has been added to the timelock + assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued."); + } +} diff --git a/script/releases/v1.9.0-slashing-ux/6-completeUpgrade.s.sol b/script/releases/v1.9.0-slashing-ux/6-completeUpgrade.s.sol new file mode 100644 index 0000000000..1cd3d9abde --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/6-completeUpgrade.s.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.12; + +import {EOADeployer} from "zeus-templates/templates/EOADeployer.sol"; +import {QueueUpgrade} from "./5-queueUpgrade.s.sol"; +import {MultisigBuilder} from "zeus-templates/templates/MultisigBuilder.sol"; +import {Encode, MultisigCall} from "zeus-templates/utils/Encode.sol"; +import "../Env.sol"; +import "../TestUtils.sol"; + +contract ExecuteUpgrade is QueueUpgrade { + using Env for *; + + function _runAsMultisig() internal virtual override prank(Env.protocolCouncilMultisig()) { + bytes memory calldata_to_executor = _getCalldataToExecutor(); + + TimelockController timelock = Env.timelockController(); + timelock.execute({ + target: Env.executorMultisig(), + value: 0, + payload: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + } + + function testScript() public virtual override { + if (!Env.isCoreProtocolDeployed()) { + return; + } + // Complete previous steps + _completeProtocolRegistryUpgrade(); + + // Deploy the core contracts + super.runAsEOA(); + + // Queue the upgrade + TimelockController timelock = Env.timelockController(); + bytes memory calldata_to_executor = _getCalldataToExecutor(); + bytes32 txHash = timelock.hashOperation({ + target: Env.executorMultisig(), + value: 0, + data: calldata_to_executor, + predecessor: 0, + salt: 0 + }); + + assertFalse(timelock.isOperationPending(txHash), "Transaction should NOT be queued."); + QueueUpgrade._runAsMultisig(); + _unsafeResetHasPranked(); // reset hasPranked so we can use it again + + assertTrue(timelock.isOperationPending(txHash), "Transaction should be queued."); + assertFalse(timelock.isOperationReady(txHash), "Transaction should NOT be ready for execution."); + assertFalse(timelock.isOperationDone(txHash), "Transaction should NOT be complete."); + + // Warp Past delay + vm.warp(block.timestamp + timelock.getMinDelay()); // 1 tick after ETA + assertEq(timelock.isOperationReady(txHash), true, "Transaction should be executable."); + + // Execute + execute(); + + // Run Tests + TestUtils.validateProxyAdmins(); + TestUtils.validateProxyConstructors(); + TestUtils.validateProxiesAlreadyInitialized(); + TestUtils.validateProxyStorage(); + TestUtils.validateImplAddressesMatchProxy(); + TestUtils.validateProtocolRegistry(); + } +} diff --git a/script/releases/v1.9.0-slashing-ux/7-script/go.mod b/script/releases/v1.9.0-slashing-ux/7-script/go.mod new file mode 100644 index 0000000000..a12d440a3a --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/7-script/go.mod @@ -0,0 +1,47 @@ +module eigenlayer-migration-script + +go 1.21 + +require ( + github.com/Layr-Labs/eigenlayer-contracts v0.0.0 + github.com/ethereum/go-ethereum v1.14.0 + github.com/joho/godotenv v1.5.1 +) + +require ( + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/bits-and-blooms/bitset v1.13.0 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect + github.com/consensys/bavard v0.1.13 // indirect + github.com/consensys/gnark-crypto v0.12.1 // indirect + github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect + github.com/deckarep/golang-set/v2 v2.5.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 // indirect + github.com/ethereum/c-kzg-4844 v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/go-ole/go-ole v1.3.0 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect + github.com/holiman/uint256 v1.2.4 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mmcloughlin/addchain v0.4.0 // indirect + github.com/prometheus/client_golang v1.17.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/shirou/gopsutil v3.21.11+incompatible // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/tklauser/go-sysconf v0.3.13 // indirect + github.com/tklauser/numcpus v0.7.0 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.19.0 // indirect + golang.org/x/tools v0.20.0 // indirect + rsc.io/tmplfunc v0.0.3 // indirect +) + +replace github.com/Layr-Labs/eigenlayer-contracts => ../../../../ diff --git a/script/releases/v1.9.0-slashing-ux/7-script/go.sum b/script/releases/v1.9.0-slashing-ux/7-script/go.sum new file mode 100644 index 0000000000..b54498ff3b --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/7-script/go.sum @@ -0,0 +1,192 @@ +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/VictoriaMetrics/fastcache v1.12.1 h1:i0mICQuojGDL3KblA7wUNlY5lOK6a4bwt3uRKnkZU40= +github.com/VictoriaMetrics/fastcache v1.12.1/go.mod h1:tX04vaqcNoQeGLD+ra5pU5sWkuxnzWhEzLwhP9w653o= +github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= +github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= +github.com/bits-and-blooms/bitset v1.13.0 h1:bAQ9OPNFYbGHV6Nez0tmNI0RiEu7/hxlYJRUA0wFAVE= +github.com/bits-and-blooms/bitset v1.13.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= +github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= +github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= +github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= +github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= +github.com/consensys/gnark-crypto v0.12.1/go.mod h1:v2Gy7L/4ZRosZ7Ivs+9SfUDr0f5UlG+EM5t7MPHiLuY= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233 h1:d28BXYi+wUpz1KBmiF9bWrjEMacUEREV6MBi2ODnrfQ= +github.com/crate-crypto/go-ipa v0.0.0-20231025140028-3c0104f4b233/go.mod h1:geZJZH3SzKCqnz5VT0q/DyIG/tvu/dZk+VIfXicupJs= +github.com/crate-crypto/go-kzg-4844 v1.0.0 h1:TsSgHwrkTKecKJ4kadtHi4b3xHW5dCFUDFnUp1TsawI= +github.com/crate-crypto/go-kzg-4844 v1.0.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/deckarep/golang-set/v2 v2.5.0 h1:hn6cEZtQ0h3J8kFrHR/NrzyOoTnjgW1+FmNJzQ7y/sA= +github.com/deckarep/golang-set/v2 v2.5.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0 h1:8UrgZ3GkP4i/CLijOJx79Yu+etlyjdBU4sfcs2WYQMs= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.2.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/ethereum/c-kzg-4844 v1.0.0 h1:0X1LBXxaEtYD9xsyj9B9ctQEZIpnvVDeoBx8aHEwTNA= +github.com/ethereum/c-kzg-4844 v1.0.0/go.mod h1:VewdlzQmpT5QSrVhbBuGoCdFJkpaJlO1aQputP83wc0= +github.com/ethereum/go-ethereum v1.14.0 h1:xRWC5NlB6g1x7vNy4HDBLuqVNbtLrc7v8S6+Uxim1LU= +github.com/ethereum/go-ethereum v1.14.0/go.mod h1:1STrq471D0BQbCX9He0hUj4bHxX2k6mt5nOQJhDNOJ8= +github.com/fjl/memsize v0.0.2 h1:27txuSD9or+NZlnOWdKUxeBzTAUkWCVh+4Gf2dWFOzA= +github.com/fjl/memsize v0.0.2/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46 h1:BAIP2GihuqhwdILrV+7GJel5lyPV3u1+PgzrWLc0TkE= +github.com/gballet/go-verkle v0.1.1-0.20231031103413-a67434b50f46/go.mod h1:QNpY22eby74jVhqH4WhDLDwxc/vqsern6pW+u2kbkpc= +github.com/getsentry/sentry-go v0.18.0 h1:MtBW5H9QgdcJabtZcuJG80BMOwaBpkRDZkxRkNC1sN0= +github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnRJRLTXZr51aKQ= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= +github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= +github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= +github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= +github.com/hashicorp/go-bexpr v0.1.10/go.mod h1:oxlubA2vC/gFVfX1A6JGp7ls7uCDlfJn732ehYYg+g0= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4 h1:X4egAf/gcS1zATw6wn4Ej8vjuVGxeHdan+bRb2ebyv4= +github.com/holiman/billy v0.0.0-20240216141850-2abb0c79d3c4/go.mod h1:5GuXa7vkL8u9FkFuWdVvfR5ix8hRB7DbOAaYULamFpc= +github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= +github.com/holiman/uint256 v1.2.4 h1:jUc4Nk8fm9jZabQuqr2JzednajVmBpC+oiTiXZJEApU= +github.com/holiman/uint256 v1.2.4/go.mod h1:EOMSn4q6Nyt9P6efbI3bueV4e1b3dGlUCXeiRV4ng7E= +github.com/huin/goupnp v1.3.0 h1:UvLUlWDNpoUdYzb2TCn+MuTWtcjXKSza2n6CBdQ0xXc= +github.com/huin/goupnp v1.3.0/go.mod h1:gnGPsThkYa7bFi/KWmEysQRf48l2dvR5bxr2OFckNX8= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= +github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= +github.com/klauspost/compress v1.15.15 h1:EF27CXIuDsYJ6mmvtBRlEuB2UVOqHG1tAXgZ7yIO+lw= +github.com/klauspost/compress v1.15.15/go.mod h1:ZcK2JAFqKOpnBlxcLsJzYfrS9X1akm9fHZNnD9+Vo/4= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/leanovate/gopter v0.2.9 h1:fQjYxZaynp97ozCzfOyOuAGOU4aU/z37zf/tOujFk7c= +github.com/leanovate/gopter v0.2.9/go.mod h1:U2L/78B+KVFIx2VmW6onHJQzXtFb+p5y3y2Sh+Jxxv8= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= +github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= +github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/mitchellh/pointerstructure v1.2.0/go.mod h1:BRAsLI5zgXmw97Lf6s25bs8ohIXc3tViBH44KcwB2g4= +github.com/mmcloughlin/addchain v0.4.0 h1:SobOdjm2xLj1KkXN5/n0xTIWyZA2+s99UCY1iPfkHRY= +github.com/mmcloughlin/addchain v0.4.0/go.mod h1:A86O+tHqZLMNO4w6ZZ4FlVQEadcoqkyU72HC5wJ4RlU= +github.com/mmcloughlin/profile v0.1.1/go.mod h1:IhHD7q1ooxgwTgjxQYkACGA77oFTDdFVejUS1/tS/qU= +github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q= +github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= +github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= +github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rs/cors v1.7.0 h1:+88SsELBHx5r+hZ8TCkggzSstaWNbDvThkVK8H6f9ik= +github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI= +github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/status-im/keycard-go v0.2.0 h1:QDLFswOQu1r5jsycloeQh3bVU8n/NatHHaZobtDnDzA= +github.com/status-im/keycard-go v0.2.0/go.mod h1:wlp8ZLbsmrF6g6WjugPAx+IzoLrkdf9+mHxBEeo3Hbg= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08lq3r4= +github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0= +github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4= +github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= +github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= +github.com/urfave/cli/v2 v2.25.7 h1:VAzn5oq403l5pHjc4OhD54+XGO9cdKVL/7lDjF+iKUs= +github.com/urfave/cli/v2 v2.25.7/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4= +golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= +golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= +golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +gopkg.in/natefinch/lumberjack.v2 v2.0.0 h1:1Lc07Kr7qY4U2YPouBjpCLxpiyxIVoxqXgkXLknAOE8= +gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +rsc.io/tmplfunc v0.0.3 h1:53XFQh69AfOa8Tw0Jm7t+GV7KZhOi6jzsCzTtKbMvzU= +rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= diff --git a/script/releases/v1.9.0-slashing-ux/7-script/script.go b/script/releases/v1.9.0-slashing-ux/7-script/script.go new file mode 100644 index 0000000000..0fc0c52d45 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/7-script/script.go @@ -0,0 +1,234 @@ +package main + +import ( + "context" + "encoding/json" + "fmt" + "io" + "net/http" + "os" + "strings" + "time" + + allocationmanager "github.com/Layr-Labs/eigenlayer-contracts/pkg/bindings/AllocationManager" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" + "github.com/ethereum/go-ethereum/ethclient" +) + +// SidecarOperatorSet represents the JSON response from the sidecar API +type SidecarOperatorSet struct { + AVS string `json:"avs"` + ID uint32 `json:"operatorSetId"` +} + +// SidecarResponse represents the full response from the sidecar API +type SidecarResponse struct { + OperatorSets []SidecarOperatorSet `json:"operatorSets"` +} + +type ScriptArgs struct { + SidecarURL string + AllocationManagerAddr string + RPCEndpoint string + PrivateKey string +} + +func main() { + // Get environment variables + args := ScriptArgs{ + SidecarURL: os.Getenv("SIDECAR_URL"), + AllocationManagerAddr: os.Getenv("ZEUS_DEPLOYED_AllocationManager_Proxy"), + RPCEndpoint: os.Getenv("RPC_URL"), + PrivateKey: os.Getenv("PRIVATE_KEY"), + } + + // Validate required environment variables + if args.SidecarURL == "" { + fmt.Println("Error: SIDECAR_URL environment variable is required") + os.Exit(1) + } + if args.AllocationManagerAddr == "" { + fmt.Println("Error: ZEUS_DEPLOYED_AllocationManager_Proxy environment variable is required") + os.Exit(1) + } + if args.RPCEndpoint == "" { + fmt.Println("Error: RPC_URL environment variable is required") + os.Exit(1) + } + if args.PrivateKey == "" { + fmt.Println("Error: PRIVATE_KEY environment variable is required") + os.Exit(1) + } + + err := runScript(args) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } +} + +func runScript(args ScriptArgs) error { + // 1. Fetch operator sets from sidecar API + operatorSets, err := fetchOperatorSets(args.SidecarURL) + if err != nil { + return fmt.Errorf("failed to fetch operator sets: %v", err) + } + + fmt.Printf("Fetched %d operator sets from sidecar API\n", len(operatorSets)) + + // If no operator sets, nothing to do + if len(operatorSets) == 0 { + fmt.Println("No operator sets to migrate") + return nil + } + + // 2. Convert to contract format + operatorSetsToCall := convertToContractFormat(operatorSets) + + // 3. Process in batches of 20 + const batchSize = 20 + totalBatches := (len(operatorSetsToCall) + batchSize - 1) / batchSize + + fmt.Printf("Processing %d operator sets in %d batches of up to %d each\n", len(operatorSetsToCall), totalBatches, batchSize) + + for i := 0; i < len(operatorSetsToCall); i += batchSize { + end := i + batchSize + if end > len(operatorSetsToCall) { + end = len(operatorSetsToCall) + } + + batch := operatorSetsToCall[i:end] + batchNum := i/batchSize + 1 + + fmt.Printf("\n--- Processing batch %d/%d (%d operator sets) ---\n", batchNum, totalBatches, len(batch)) + + err = callMigrateSlashers(args, batch) + if err != nil { + return fmt.Errorf("failed to process batch %d: %v", batchNum, err) + } + + // Add a delay + if end < len(operatorSetsToCall) { + fmt.Println("Waiting before next batch...") + time.Sleep(2 * time.Second) + } + } + + fmt.Printf("\n✅ Successfully migrated all %d operator sets in %d batches\n", len(operatorSetsToCall), totalBatches) + + return nil +} + +func fetchOperatorSets(sidecarURL string) ([]SidecarOperatorSet, error) { + // Make HTTP request to sidecar API + url := fmt.Sprintf("%s/v1/operatorSets", strings.TrimRight(sidecarURL, "/")) + + fmt.Printf("Fetching operator sets from %s\n", url) + + req, err := http.NewRequest("GET", url, nil) + if err != nil { + return nil, fmt.Errorf("failed to create request: %v", err) + } + req.Header.Set("Accept", "application/json") + + client := &http.Client{} + resp, err := client.Do(req) + if err != nil { + return nil, fmt.Errorf("failed to make request: %v", err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + body, _ := io.ReadAll(resp.Body) + return nil, fmt.Errorf("unexpected status code %d: %s", resp.StatusCode, string(body)) + } + + // Parse response + body, err := io.ReadAll(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to read response body: %v", err) + } + + var response SidecarResponse + err = json.Unmarshal(body, &response) + if err != nil { + return nil, fmt.Errorf("failed to parse JSON response: %v", err) + } + + return response.OperatorSets, nil +} + +func convertToContractFormat(sidecarSets []SidecarOperatorSet) []allocationmanager.OperatorSet { + contractSets := make([]allocationmanager.OperatorSet, len(sidecarSets)) + + for i, set := range sidecarSets { + contractSets[i] = allocationmanager.OperatorSet{ + Avs: common.HexToAddress(set.AVS), + Id: set.ID, + } + } + + return contractSets +} + +func callMigrateSlashers(args ScriptArgs, operatorSets []allocationmanager.OperatorSet) error { + // Connect to Ethereum client + client, err := ethclient.Dial(args.RPCEndpoint) + if err != nil { + return fmt.Errorf("failed to connect to Ethereum client: %v", err) + } + + // Parse private key + privateKey, err := crypto.HexToECDSA(strings.TrimPrefix(args.PrivateKey, "0x")) + if err != nil { + return fmt.Errorf("failed to parse private key: %v", err) + } + + // Get chain ID + chainID, err := client.ChainID(context.Background()) + if err != nil { + return fmt.Errorf("failed to get chain ID: %v", err) + } + + // Create auth transactor + auth, err := bind.NewKeyedTransactorWithChainID(privateKey, chainID) + if err != nil { + return fmt.Errorf("failed to create transactor: %v", err) + } + + // Create AllocationManager instance + allocationManager, err := allocationmanager.NewAllocationManager(common.HexToAddress(args.AllocationManagerAddr), client) + if err != nil { + return fmt.Errorf("failed to create AllocationManager instance: %v", err) + } + + // Call migrateSlashers + fmt.Printf("Calling migrateSlashers with %d operator sets:\n", len(operatorSets)) + for idx, opSet := range operatorSets { + fmt.Printf(" [%d] AVS: %s, ID: %d\n", idx+1, opSet.Avs.Hex(), opSet.Id) + } + + tx, err := allocationManager.MigrateSlashers(auth, operatorSets) + if err != nil { + return fmt.Errorf("failed to call migrateSlashers: %v", err) + } + + fmt.Printf("Transaction sent! Hash: %s\n", tx.Hash().Hex()) + + // Wait for transaction receipt + fmt.Println("Waiting for transaction to be mined...") + receipt, err := bind.WaitMined(context.Background(), client, tx) + if err != nil { + return fmt.Errorf("failed to wait for transaction: %v", err) + } + + if receipt.Status == 0 { + return fmt.Errorf("transaction failed") + } + + fmt.Printf("Transaction mined! Block: %d, Gas used: %d\n", receipt.BlockNumber.Uint64(), receipt.GasUsed) + + return nil +} diff --git a/script/releases/v1.9.0-slashing-ux/7-script/script_test.go b/script/releases/v1.9.0-slashing-ux/7-script/script_test.go new file mode 100644 index 0000000000..c0cad26a32 --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/7-script/script_test.go @@ -0,0 +1,213 @@ +package main + +import ( + "encoding/json" + "net/http" + "net/http/httptest" + "os" + "testing" + + "github.com/ethereum/go-ethereum/common" + "github.com/joho/godotenv" +) + +func TestFetchOperatorSets(t *testing.T) { + // Create a test server that returns mock operator sets + mockResponse := SidecarResponse{ + OperatorSets: []SidecarOperatorSet{ + { + AVS: "0x1234567890123456789012345678901234567890", + ID: 1, + }, + { + AVS: "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd", + ID: 2, + }, + }, + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/v1/operatorSets" { + t.Errorf("Expected path /v1/operatorSets, got %s", r.URL.Path) + } + if r.Header.Get("Accept") != "application/json" { + t.Errorf("Expected Accept header application/json, got %s", r.Header.Get("Accept")) + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(mockResponse) + })) + defer server.Close() + + // Test fetchOperatorSets + operatorSets, err := fetchOperatorSets(server.URL) + if err != nil { + t.Fatalf("fetchOperatorSets failed: %v", err) + } + + if len(operatorSets) != 2 { + t.Errorf("Expected 2 operator sets, got %d", len(operatorSets)) + } + + if operatorSets[0].AVS != mockResponse.OperatorSets[0].AVS { + t.Errorf("Expected AVS %s, got %s", mockResponse.OperatorSets[0].AVS, operatorSets[0].AVS) + } + + if operatorSets[1].ID != mockResponse.OperatorSets[1].ID { + t.Errorf("Expected ID %d, got %d", mockResponse.OperatorSets[1].ID, operatorSets[1].ID) + } +} + +func TestConvertToContractFormat(t *testing.T) { + sidecarSets := []SidecarOperatorSet{ + { + AVS: "0x1234567890123456789012345678901234567890", + ID: 1, + }, + { + AVS: "0xabcdefabcdefabcdefabcdefabcdefabcdefabcd", + ID: 2, + }, + } + + contractSets := convertToContractFormat(sidecarSets) + + if len(contractSets) != 2 { + t.Errorf("Expected 2 contract sets, got %d", len(contractSets)) + } + + expectedAVS1 := common.HexToAddress("0x1234567890123456789012345678901234567890") + if contractSets[0].Avs != expectedAVS1 { + t.Errorf("Expected AVS %s, got %s", expectedAVS1.Hex(), contractSets[0].Avs.Hex()) + } + + if contractSets[1].Id != 2 { + t.Errorf("Expected ID 2, got %d", contractSets[1].Id) + } +} + +func TestFetchAndConvert(t *testing.T) { + // Create a test server + mockResponse := SidecarResponse{ + OperatorSets: []SidecarOperatorSet{ + { + AVS: "0x1234567890123456789012345678901234567890", + ID: 1, + }, + }, + } + + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(mockResponse) + })) + defer server.Close() + + // Test fetching and converting operator sets + operatorSets, err := fetchOperatorSets(server.URL) + if err != nil { + t.Fatalf("fetchOperatorSets failed: %v", err) + } + + if len(operatorSets) != 1 { + t.Errorf("Expected 1 operator set, got %d", len(operatorSets)) + } + + // Test conversion + contractSets := convertToContractFormat(operatorSets) + if len(contractSets) != 1 { + t.Errorf("Expected 1 contract set, got %d", len(contractSets)) + } + + expectedAVS := common.HexToAddress("0x1234567890123456789012345678901234567890") + if contractSets[0].Avs != expectedAVS { + t.Errorf("Expected AVS %s, got %s", expectedAVS.Hex(), contractSets[0].Avs.Hex()) + } +} + +func TestMainFunctionWithEnv(t *testing.T) { + // Skip this test if we're in CI or don't have a .env file + if _, err := os.Stat(".env"); os.IsNotExist(err) { + t.Skip("Skipping test that requires .env file") + } + + // Load .env file + err := godotenv.Load() + if err != nil { + t.Fatalf("Error loading .env file: %v", err) + } + + // Check if SIDECAR_URL is set + sidecarURL := os.Getenv("SIDECAR_URL") + if sidecarURL == "" { + t.Skip("SIDECAR_URL not set in .env file") + } + + // Test fetching real operator sets + operatorSets, err := fetchOperatorSets(sidecarURL) + if err != nil { + t.Logf("Warning: Failed to fetch operator sets from %s: %v", sidecarURL, err) + // Don't fail the test, as the API might be down or require auth + return + } + + t.Logf("Successfully fetched %d operator sets from %s", len(operatorSets), sidecarURL) + + // Log first few operator sets for debugging + for i := 0; i < len(operatorSets) && i < 3; i++ { + t.Logf(" OperatorSet %d: AVS=%s, ID=%d", i, operatorSets[i].AVS, operatorSets[i].ID) + } +} + +func TestErrorHandling(t *testing.T) { + // Test with server that returns error + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("Internal Server Error")) + })) + defer server.Close() + + _, err := fetchOperatorSets(server.URL) + if err == nil { + t.Error("Expected error for 500 response, got nil") + } + + // Test with invalid JSON + server2 := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte("invalid json")) + })) + defer server2.Close() + + _, err = fetchOperatorSets(server2.URL) + if err == nil { + t.Error("Expected error for invalid JSON, got nil") + } +} + +func TestBatching(t *testing.T) { + // Test that batching logic correctly splits operator sets + testCases := []struct { + totalSets int + expectedBatches int + }{ + {0, 0}, + {1, 1}, + {20, 1}, + {21, 2}, + {40, 2}, + {41, 3}, + {100, 5}, + } + + const batchSize = 20 + for _, tc := range testCases { + actualBatches := (tc.totalSets + batchSize - 1) / batchSize + if tc.totalSets == 0 { + actualBatches = 0 + } + if actualBatches != tc.expectedBatches { + t.Errorf("For %d sets, expected %d batches, got %d", tc.totalSets, tc.expectedBatches, actualBatches) + } + } +} diff --git a/script/releases/v1.9.0-slashing-ux/7-script/start.sh b/script/releases/v1.9.0-slashing-ux/7-script/start.sh new file mode 100755 index 0000000000..58eb73ce9c --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/7-script/start.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +cd script/releases/v1.9.0-slashing-ux/7-script +go run script.go \ No newline at end of file diff --git a/script/releases/v1.9.0-slashing-ux/upgrade.json b/script/releases/v1.9.0-slashing-ux/upgrade.json new file mode 100644 index 0000000000..86ac5a953d --- /dev/null +++ b/script/releases/v1.9.0-slashing-ux/upgrade.json @@ -0,0 +1,58 @@ +{ + "name": "slashing-ux-improvements", + "from": ">=1.8.0", + "to": "1.9.0", + "phases": [ + { + "type": "multisig", + "filename": "1-deployProtocolRegistryProxy.s.sol" + }, + { + "type": "eoa", + "filename": "2-deployProtocolRegistryImpl.s.sol" + }, + { + "type": "multisig", + "filename": "3-upgradeProtocolRegistry.s.sol" + }, + { + "type": "eoa", + "filename": "4-deployCoreContracts.s.sol" + }, + { + "type": "multisig", + "filename": "5-queueUpgrade.s.sol" + }, + { + "type": "multisig", + "filename": "6-completeUpgrade.s.sol" + }, + { + "type": "script", + "filename": "7-script/start.sh", + "arguments": [ + { + "type": "url", + "passBy": "env", + "inputType": "text", + "name": "SIDECAR_URL", + "prompt": "Enter an Sidecar URL" + }, + { + "type": "url", + "passBy": "env", + "inputType": "text", + "name": "RPC_URL", + "prompt": "Enter an RPC URL" + }, + { + "type": "privateKey", + "passBy": "env", + "inputType": "password", + "name": "PRIVATE_KEY", + "prompt": "Enter an ETH wallet private key to migrate from" + } + ] + } + ] +} \ No newline at end of file diff --git a/script/tasks/complete_withdrawal_from_strategy.s.sol b/script/tasks/complete_withdrawal_from_strategy.s.sol index 9194e22c19..22ef490cc2 100644 --- a/script/tasks/complete_withdrawal_from_strategy.s.sol +++ b/script/tasks/complete_withdrawal_from_strategy.s.sol @@ -75,7 +75,8 @@ contract CompleteWithdrawFromStrategy is Script, Test { DepositScalingFactor memory dsf = DepositScalingFactor(dm.depositScalingFactor(msg.sender, strategies[0])); // Get TM for Operator in strategies - uint64[] memory maxMagnitudes = am.getMaxMagnitudesAtBlock(msg.sender, strategies, startBlock); + uint64[] memory maxMagnitudes = + IAllocationManager(address(am)).getMaxMagnitudesAtBlock(msg.sender, strategies, startBlock); uint256 slashingFactor = _getSlashingFactor(em, msg.sender, strategies[0], maxMagnitudes[0]); uint256 sharesToWithdraw = dsf.calcWithdrawable(amount, slashingFactor); diff --git a/script/utils/ExistingDeploymentParser.sol b/script/utils/ExistingDeploymentParser.sol index 239451274c..488ff9d9e0 100644 --- a/script/utils/ExistingDeploymentParser.sol +++ b/script/utils/ExistingDeploymentParser.sol @@ -10,6 +10,7 @@ import "../../src/contracts/core/DelegationManager.sol"; import "../../src/contracts/core/AVSDirectory.sol"; import "../../src/contracts/core/RewardsCoordinator.sol"; import "../../src/contracts/core/AllocationManager.sol"; +import "../../src/contracts/core/AllocationManagerView.sol"; import "../../src/contracts/permissions/PermissionController.sol"; import "../../src/contracts/strategies/StrategyFactory.sol"; @@ -104,8 +105,9 @@ contract ExistingDeploymentParser is Script, Logger { UpgradeableBeacon public strategyBeacon; /// @dev AllocationManager - AllocationManager public allocationManager; - AllocationManager public allocationManagerImplementation; + IAllocationManager public allocationManager; + IAllocationManager public allocationManagerImplementation; + IAllocationManagerView public allocationManagerView; /// @dev AVSDirectory AVSDirectory public avsDirectory; @@ -220,7 +222,7 @@ contract ExistingDeploymentParser is Script, Logger { eigenLayerPauserReg = PauserRegistry(json.readAddress(".addresses.eigenLayerPauserReg")); // FIXME: hotfix - remove later... - permissionControllerImplementation = new PermissionController(SEMVER); + permissionControllerImplementation = new PermissionController(); permissionController = PermissionController( address( new TransparentUpgradeableProxy( @@ -230,9 +232,16 @@ contract ExistingDeploymentParser is Script, Logger { ); // AllocationManager - allocationManager = AllocationManager(json.readAddress(".addresses.allocationManager")); + allocationManager = IAllocationManager(json.readAddress(".addresses.allocationManager")); allocationManagerImplementation = - AllocationManager(json.readAddress(".addresses.allocationManagerImplementation")); + IAllocationManager(json.readAddress(".addresses.allocationManagerImplementation")); + + // allocationManagerView = IAllocationManagerView(json.readAddress(".addresses.allocationManagerView")); + + // FIXME: hotfix - remove later... + allocationManagerView = new AllocationManagerView( + delegationManager, eigenStrategy, DEALLOCATION_DELAY, ALLOCATION_CONFIGURATION_DELAY + ); // AVSDirectory avsDirectory = AVSDirectory(json.readAddress(".addresses.avsDirectory")); diff --git a/src/contracts/avs/task/TaskMailbox.sol b/src/contracts/avs/task/TaskMailbox.sol index f6cc96fd38..7dcc126900 100644 --- a/src/contracts/avs/task/TaskMailbox.sol +++ b/src/contracts/avs/task/TaskMailbox.sol @@ -19,7 +19,6 @@ import {IBaseCertificateVerifier} from "../../interfaces/IBaseCertificateVerifie import {IKeyRegistrarTypes} from "../../interfaces/IKeyRegistrar.sol"; import {ITaskMailbox} from "../../interfaces/ITaskMailbox.sol"; import {OperatorSet} from "../../libraries/OperatorSetLib.sol"; -import {SemVerMixin} from "../../mixins/SemVerMixin.sol"; import {TaskMailboxStorage} from "./TaskMailboxStorage.sol"; /** @@ -27,13 +26,7 @@ import {TaskMailboxStorage} from "./TaskMailboxStorage.sol"; * @author Layr Labs, Inc. * @notice Contract for managing the lifecycle of tasks that are executed by operator sets of task-based AVSs. */ -contract TaskMailbox is - Initializable, - OwnableUpgradeable, - ReentrancyGuardUpgradeable, - TaskMailboxStorage, - SemVerMixin -{ +contract TaskMailbox is Initializable, OwnableUpgradeable, ReentrancyGuardUpgradeable, TaskMailboxStorage { using SafeERC20 for IERC20; using SafeCast for *; @@ -42,14 +35,12 @@ contract TaskMailbox is * @param _bn254CertificateVerifier Address of the BN254 certificate verifier * @param _ecdsaCertificateVerifier Address of the ECDSA certificate verifier * @param _maxTaskSLA Maximum task SLA in seconds - * @param _version The semantic version of the contract */ constructor( address _bn254CertificateVerifier, address _ecdsaCertificateVerifier, - uint96 _maxTaskSLA, - string memory _version - ) TaskMailboxStorage(_bn254CertificateVerifier, _ecdsaCertificateVerifier, _maxTaskSLA) SemVerMixin(_version) { + uint96 _maxTaskSLA + ) TaskMailboxStorage(_bn254CertificateVerifier, _ecdsaCertificateVerifier, _maxTaskSLA) { _disableInitializers(); } diff --git a/src/contracts/core/AVSDirectory.sol b/src/contracts/core/AVSDirectory.sol index 6f76e421e3..6a30484cbb 100644 --- a/src/contracts/core/AVSDirectory.sol +++ b/src/contracts/core/AVSDirectory.sol @@ -7,7 +7,7 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../mixins/SignatureUtilsMixin.sol"; import "../permissions/Pausable.sol"; -import "./AVSDirectoryStorage.sol"; +import "./storage/AVSDirectoryStorage.sol"; contract AVSDirectory is Initializable, diff --git a/src/contracts/core/AllocationManager.sol b/src/contracts/core/AllocationManager.sol index 44aedf268b..6a34d103f0 100644 --- a/src/contracts/core/AllocationManager.sol +++ b/src/contracts/core/AllocationManager.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../mixins/Deprecated_OwnableUpgradeable.sol"; +import "../mixins/SplitContractMixin.sol"; import "../mixins/PermissionControllerMixin.sol"; -import "../mixins/SemVerMixin.sol"; import "../permissions/Pausable.sol"; import "../libraries/SlashingLib.sol"; import "../libraries/OperatorSetLib.sol"; -import "./AllocationManagerStorage.sol"; +import "./storage/AllocationManagerStorage.sol"; contract AllocationManager is Initializable, @@ -18,7 +18,8 @@ contract AllocationManager is AllocationManagerStorage, ReentrancyGuardUpgradeable, PermissionControllerMixin, - SemVerMixin + SplitContractMixin, + IAllocationManager { using DoubleEndedQueue for DoubleEndedQueue.Bytes32Deque; using Snapshots for Snapshots.DefaultWadHistory; @@ -37,51 +38,54 @@ contract AllocationManager is * @dev Initializes the DelegationManager address, the deallocation delay, and the allocation configuration delay. */ constructor( + IAllocationManagerView _allocationManagerView, IDelegationManager _delegation, IStrategy _eigenStrategy, IPauserRegistry _pauserRegistry, IPermissionController _permissionController, uint32 _DEALLOCATION_DELAY, - uint32 _ALLOCATION_CONFIGURATION_DELAY, - string memory _version + uint32 _ALLOCATION_CONFIGURATION_DELAY ) AllocationManagerStorage(_delegation, _eigenStrategy, _DEALLOCATION_DELAY, _ALLOCATION_CONFIGURATION_DELAY) Pausable(_pauserRegistry) + SplitContractMixin(address(_allocationManagerView)) PermissionControllerMixin(_permissionController) - SemVerMixin(_version) { _disableInitializers(); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function initialize( uint256 initialPausedStatus ) external initializer { _setPausedStatus(initialPausedStatus); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function slashOperator( address avs, SlashingParams calldata params - ) external onlyWhenNotPaused(PAUSED_OPERATOR_SLASHING) checkCanCall(avs) returns (uint256, uint256[] memory) { + ) external onlyWhenNotPaused(PAUSED_OPERATOR_SLASHING) returns (uint256, uint256[] memory) { // Check that the operator set exists and the operator is registered to it OperatorSet memory operatorSet = OperatorSet(avs, params.operatorSetId); require(params.strategies.length == params.wadsToSlash.length, InputArrayLengthMismatch()); require(_operatorSets[operatorSet.avs].contains(operatorSet.id), InvalidOperatorSet()); require(isOperatorSlashable(params.operator, operatorSet), OperatorNotSlashable()); + // Assert that the caller is the slasher for the operator set + require(msg.sender == getSlasher(operatorSet), InvalidCaller()); + return _slashOperator(params, operatorSet); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function modifyAllocations( address operator, AllocateParams[] memory params ) external onlyWhenNotPaused(PAUSED_MODIFY_ALLOCATIONS) { // Check that the caller is allowed to modify allocations on behalf of the operator // We do not use a modifier to avoid `stack too deep` errors - require(_checkCanCall(operator), InvalidCaller()); + _checkCanCall(operator); // Check that the operator exists and has configured an allocation delay uint32 operatorAllocationDelay; @@ -166,7 +170,7 @@ contract AllocationManager is } } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function clearDeallocationQueue( address operator, IStrategy[] calldata strategies, @@ -178,7 +182,7 @@ contract AllocationManager is } } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function registerForOperatorSets( address operator, RegisterParams calldata params @@ -205,12 +209,12 @@ contract AllocationManager is getAVSRegistrar(params.avs).registerOperator(operator, params.avs, params.operatorSetIds, params.data); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function deregisterFromOperatorSets( DeregisterParams calldata params ) external onlyWhenNotPaused(PAUSED_OPERATOR_SET_REGISTRATION_AND_DEREGISTRATION) { // Check that the caller is either authorized on behalf of the operator or AVS - require(_checkCanCall(params.operator) || _checkCanCall(params.avs), InvalidCaller()); + require(_canCall(params.operator) || _canCall(params.avs), InvalidCaller()); for (uint256 i = 0; i < params.operatorSetIds.length; i++) { // Check the operator set exists and the operator is registered to it @@ -235,16 +239,22 @@ contract AllocationManager is getAVSRegistrar(params.avs).deregisterOperator(params.operator, params.avs, params.operatorSetIds); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function setAllocationDelay(address operator, uint32 delay) external { - if (msg.sender != address(delegation)) { - require(_checkCanCall(operator), InvalidCaller()); + /// If the caller is the delegationManager, the operator is newly registered + /// This results in *newly-registered* operators in the core protocol to have their allocation delay effective immediately + bool newlyRegistered = (msg.sender == address(delegation)); + + // If we're not newly registered, check that the caller (not the delegationManager) is authorized to set the allocation delay for the operator + if (!newlyRegistered) { + _checkCanCall(operator); require(delegation.isOperator(operator), InvalidOperator()); } - _setAllocationDelay(operator, delay); + + _setAllocationDelay(operator, delay, newlyRegistered); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function setAVSRegistrar(address avs, IAVSRegistrar registrar) external checkCanCall(avs) { // Check that the registrar is correctly configured to prevent an AVSRegistrar contract // from being used with the wrong AVS @@ -253,26 +263,42 @@ contract AllocationManager is emit AVSRegistrarSet(avs, getAVSRegistrar(avs)); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function updateAVSMetadataURI(address avs, string calldata metadataURI) external checkCanCall(avs) { if (!_avsRegisteredMetadata[avs]) _avsRegisteredMetadata[avs] = true; emit AVSMetadataURIUpdated(avs, metadataURI); } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions + /// @notice This function will be deprecated in Early Q2 2026 in favor of `createOperatorSets` which takes in `CreateSetParamsV2` function createOperatorSets(address avs, CreateSetParams[] calldata params) external checkCanCall(avs) { + createOperatorSets(avs, _convertCreateSetParams(params, avs)); + } + + /// @inheritdoc IAllocationManagerActions + function createOperatorSets(address avs, CreateSetParamsV2[] memory params) public checkCanCall(avs) { require(_avsRegisteredMetadata[avs], NonexistentAVSMetadata()); for (uint256 i = 0; i < params.length; i++) { _createOperatorSet(avs, params[i], DEFAULT_BURN_ADDRESS); } } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions + /// @notice This function will be deprecated in Early Q2 2026 in favor of `createRedistributingOperatorSets` which takes in `CreateSetParamsV2` function createRedistributingOperatorSets( address avs, CreateSetParams[] calldata params, address[] calldata redistributionRecipients ) external checkCanCall(avs) { + createRedistributingOperatorSets(avs, _convertCreateSetParams(params, avs), redistributionRecipients); + } + + /// @inheritdoc IAllocationManagerActions + function createRedistributingOperatorSets( + address avs, + CreateSetParamsV2[] memory params, + address[] calldata redistributionRecipients + ) public checkCanCall(avs) { require(params.length == redistributionRecipients.length, InputArrayLengthMismatch()); require(_avsRegisteredMetadata[avs], NonexistentAVSMetadata()); for (uint256 i = 0; i < params.length; i++) { @@ -283,7 +309,7 @@ contract AllocationManager is } } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function addStrategiesToOperatorSet( address avs, uint32 operatorSetId, @@ -299,7 +325,7 @@ contract AllocationManager is } } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerActions function removeStrategiesFromOperatorSet( address avs, uint32 operatorSetId, @@ -314,6 +340,48 @@ contract AllocationManager is } } + /// @inheritdoc IAllocationManagerActions + function updateSlasher(OperatorSet memory operatorSet, address slasher) external checkCanCall(operatorSet.avs) { + require(_operatorSets[operatorSet.avs].contains(operatorSet.id), InvalidOperatorSet()); + // Prevent updating a slasher if one is not already set + // A slasher is set either on operatorSet creation or, for operatorSets created prior to v1.9.0, via `migrateSlashers` + require(getSlasher(operatorSet) != address(0), SlasherNotSet()); + _updateSlasher({operatorSet: operatorSet, slasher: slasher, instantEffectBlock: false}); + } + + /// @inheritdoc IAllocationManagerActions + function migrateSlashers( + OperatorSet[] memory operatorSets + ) external { + for (uint256 i = 0; i < operatorSets.length; i++) { + // If the operatorSet does not exist, continue + if (!_operatorSets[operatorSets[i].avs].contains(operatorSets[i].id)) { + continue; + } + + // If the slasher is already set, continue + if (getSlasher(operatorSets[i]) != address(0)) { + continue; + } + + // Get the slasher from the permission controller. + address[] memory slashers = + permissionController.getAppointees(operatorSets[i].avs, address(this), this.slashOperator.selector); + + address slasher; + // If there are no slashers or the first slasher is the 0 address, set the slasher to the AVS + if (slashers.length == 0 || slashers[0] == address(0)) { + slasher = operatorSets[i].avs; + // Else, set the slasher to the first slasher + } else { + slasher = slashers[0]; + } + + _updateSlasher({operatorSet: operatorSets[i], slasher: slasher, instantEffectBlock: true}); + emit SlasherMigrated(operatorSets[i], slasher); + } + } + /** * * INTERNAL FUNCTIONS @@ -442,10 +510,11 @@ contract AllocationManager is * @dev If `redistributionRecipient` is address(0), the operator set is considered non-redistributing * and slashed funds are sent to the `DEFAULT_BURN_ADDRESS`. * @dev Providing `BEACONCHAIN_ETH_STRAT` as a strategy will revert since it's not currently supported. + * @dev The address that can slash the operatorSet is the `avs` address. */ function _createOperatorSet( address avs, - CreateSetParams calldata params, + CreateSetParamsV2 memory params, address redistributionRecipient ) internal { OperatorSet memory operatorSet = OperatorSet(avs, params.operatorSetId); @@ -464,6 +533,9 @@ contract AllocationManager is for (uint256 j = 0; j < params.strategies.length; j++) { _addStrategyToOperatorSet(operatorSet, params.strategies[j], isRedistributing); } + + // Update the slasher for the operator set + _updateSlasher({operatorSet: operatorSet, slasher: params.slasher, instantEffectBlock: true}); } /** @@ -503,8 +575,9 @@ contract AllocationManager is * allocating magnitude to an operator set, and the magnitude becoming slashable. * @param operator The operator to set the delay on behalf of. * @param delay The allocation delay in blocks. + * @param newlyRegistered Whether the operator is newly registered in the core protocol. */ - function _setAllocationDelay(address operator, uint32 delay) internal { + function _setAllocationDelay(address operator, uint32 delay, bool newlyRegistered) internal { AllocationDelayInfo memory info = _allocationDelayInfo[operator]; // If there is a pending delay that can be applied now, set it @@ -514,7 +587,16 @@ contract AllocationManager is } info.pendingDelay = delay; - info.effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1; + + /// If the caller is the delegationManager, the operator is newly registered + /// This results in *newly-registered* operators in the core protocol to have their allocation delay effective immediately + if (newlyRegistered) { + // The delay takes effect immediately + info.effectBlock = uint32(block.number); + } else { + // Wait the entire configuration delay before the delay takes effect + info.effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1; + } _allocationDelayInfo[operator] = info; emit AllocationDelaySet(operator, delay, info.effectBlock); @@ -613,53 +695,6 @@ contract AllocationManager is } } - /** - * @dev Returns the minimum allocated stake at the future block. - * @param operatorSet The operator set to get the minimum allocated stake for. - * @param operators The operators to get the minimum allocated stake for. - * @param strategies The strategies to get the minimum allocated stake for. - * @param futureBlock The future block to get the minimum allocated stake for. - */ - function _getMinimumAllocatedStake( - OperatorSet memory operatorSet, - address[] memory operators, - IStrategy[] memory strategies, - uint32 futureBlock - ) internal view returns (uint256[][] memory allocatedStake) { - allocatedStake = new uint256[][](operators.length); - uint256[][] memory delegatedStake = delegation.getOperatorsShares(operators, strategies); - - for (uint256 i = 0; i < operators.length; i++) { - address operator = operators[i]; - - allocatedStake[i] = new uint256[](strategies.length); - - for (uint256 j = 0; j < strategies.length; j++) { - IStrategy strategy = strategies[j]; - - // Fetch the max magnitude and allocation for the operator/strategy. - // Prevent division by 0 if needed. This mirrors the "FullySlashed" checks - // in the DelegationManager - uint64 maxMagnitude = _maxMagnitudeHistory[operator][strategy].latest(); - if (maxMagnitude == 0) { - continue; - } - - Allocation memory alloc = getAllocation(operator, operatorSet, strategy); - - // If the pending change takes effect before `futureBlock`, include it in `currentMagnitude` - // However, ONLY include the pending change if it is a deallocation, since this method - // is supposed to return the minimum slashable stake between now and `futureBlock` - if (alloc.effectBlock <= futureBlock && alloc.pendingDiff < 0) { - alloc.currentMagnitude = _addInt128(alloc.currentMagnitude, alloc.pendingDiff); - } - - uint256 slashableProportion = uint256(alloc.currentMagnitude).divWad(maxMagnitude); - allocatedStake[i][j] = delegatedStake[i][j].mulWad(slashableProportion); - } - } - } - function _updateMaxMagnitude(address operator, IStrategy strategy, uint64 newMaxMagnitude) internal { _maxMagnitudeHistory[operator][strategy].push({key: uint32(block.number), value: newMaxMagnitude}); emit MaxMagnitudeUpdated(operator, strategy, newMaxMagnitude); @@ -675,21 +710,51 @@ contract AllocationManager is } /** - * @notice Helper function to check if an operator is redistributable from a list of operator sets - * @param operator The operator to check - * @param operatorSets The list of operator sets to check - * @return True if the operator is redistributable from any of the operator sets, false otherwise + * @dev Helper function to update the slasher for an operator set + * @param operatorSet the operator set to update the slasher for + * @param slasher the new slasher + * @param instantEffectBlock Whether the new slasher will take effect immediately. Instant if on operatorSet creation or migration function. + * The new slasher will take `ALLOCATION_CONFIGURATION_DELAY` blocks to take effect if called by the `updateSlasher` function. */ - function _isOperatorRedistributable( - address operator, - OperatorSet[] memory operatorSets - ) internal view returns (bool) { - for (uint256 i = 0; i < operatorSets.length; ++i) { - if (isOperatorSlashable(operator, operatorSets[i]) && isRedistributingOperatorSet(operatorSets[i])) { - return true; - } + function _updateSlasher(OperatorSet memory operatorSet, address slasher, bool instantEffectBlock) internal { + // Ensure that the slasher address is not the 0 address, which is used to denote if the slasher is not set + require(slasher != address(0), InputAddressZero()); + + SlasherParams memory params = _slashers[operatorSet.key()]; + + // If there is a pending slasher that can be applied, apply it + if (params.effectBlock != 0 && block.number >= params.effectBlock) { + params.slasher = params.pendingSlasher; + } + + // Set the pending parameters + params.pendingSlasher = slasher; + if (instantEffectBlock) { + params.effectBlock = uint32(block.number); + } else { + params.effectBlock = uint32(block.number) + ALLOCATION_CONFIGURATION_DELAY + 1; + } + + _slashers[operatorSet.key()] = params; + emit SlasherUpdated(operatorSet, slasher, params.effectBlock); + } + + /** + * @notice Helper function to convert CreateSetParams to CreateSetParamsV2 + * @param params The parameters to convert + * @param avs The AVS address that owns the operator sets, which will be the slasher + * @return The converted parameters, into CreateSetParamsV2 format + * @dev The slasher will be set to the AVS address + */ + function _convertCreateSetParams( + CreateSetParams[] calldata params, + address avs + ) internal pure returns (CreateSetParamsV2[] memory) { + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](params.length); + for (uint256 i = 0; i < params.length; i++) { + createSetParams[i] = CreateSetParamsV2(params[i].operatorSetId, params[i].strategies, avs); } - return false; + return createSetParams; } /** @@ -698,337 +763,263 @@ contract AllocationManager is * */ - /// @inheritdoc IAllocationManager - function getOperatorSetCount( - address avs - ) external view returns (uint256) { - return _operatorSets[avs].length(); - } - - /// @inheritdoc IAllocationManager - function getAllocatedSets( - address operator - ) public view returns (OperatorSet[] memory) { - uint256 length = allocatedSets[operator].length(); + /// Public View Functions - OperatorSet[] memory operatorSets = new OperatorSet[](length); - for (uint256 i = 0; i < length; i++) { - operatorSets[i] = OperatorSetLib.decode(allocatedSets[operator].at(i)); - } + /// @inheritdoc IAllocationManagerView + function getAVSRegistrar( + address avs + ) public view returns (IAVSRegistrar) { + IAVSRegistrar registrar = _avsRegistrar[avs]; - return operatorSets; + return address(registrar) == address(0) ? IAVSRegistrar(avs) : registrar; } - /// @inheritdoc IAllocationManager - function getAllocatedStrategies( - address operator, + /// @inheritdoc IAllocationManagerView + function isRedistributingOperatorSet( OperatorSet memory operatorSet - ) external view returns (IStrategy[] memory) { - address[] memory values = allocatedStrategies[operator][operatorSet.key()].values(); - IStrategy[] memory strategies; - - assembly { - strategies := values - } - - return strategies; + ) public view returns (bool) { + return getRedistributionRecipient(operatorSet) != DEFAULT_BURN_ADDRESS; } - /// @inheritdoc IAllocationManager - function getAllocation( - address operator, - OperatorSet memory operatorSet, - IStrategy strategy - ) public view returns (Allocation memory) { - (, Allocation memory allocation) = _getUpdatedAllocation(operator, operatorSet.key(), strategy); - - return allocation; - } + /// @inheritdoc IAllocationManagerView + function getAllocationDelay( + address operator + ) public view returns (bool, uint32) { + AllocationDelayInfo memory info = _allocationDelayInfo[operator]; - /// @inheritdoc IAllocationManager - function getAllocations( - address[] memory operators, - OperatorSet memory operatorSet, - IStrategy strategy - ) external view returns (Allocation[] memory) { - Allocation[] memory _allocations = new Allocation[](operators.length); + uint32 delay = info.delay; + bool isSet = info.isSet; - for (uint256 i = 0; i < operators.length; i++) { - _allocations[i] = getAllocation(operators[i], operatorSet, strategy); + // If there is a pending delay that can be applied, apply it + if (info.effectBlock != 0 && block.number >= info.effectBlock) { + delay = info.pendingDelay; + isSet = true; } - return _allocations; + return (isSet, delay); } - /// @inheritdoc IAllocationManager - function getStrategyAllocations( - address operator, - IStrategy strategy - ) external view returns (OperatorSet[] memory, Allocation[] memory) { - uint256 length = allocatedSets[operator].length(); - - OperatorSet[] memory operatorSets = new OperatorSet[](length); - Allocation[] memory _allocations = new Allocation[](length); - - for (uint256 i = 0; i < length; i++) { - OperatorSet memory operatorSet = OperatorSetLib.decode(allocatedSets[operator].at(i)); - - operatorSets[i] = operatorSet; - _allocations[i] = getAllocation(operator, operatorSet, strategy); - } - - return (operatorSets, _allocations); - } + /// @inheritdoc IAllocationManagerView + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { + RegistrationStatus memory status = registrationStatus[operator][operatorSet.key()]; - /// @inheritdoc IAllocationManager - function getEncumberedMagnitude(address operator, IStrategy strategy) external view returns (uint64) { - (uint64 curEncumberedMagnitude,) = _getFreeAndUsedMagnitude(operator, strategy); - return curEncumberedMagnitude; + // slashableUntil returns the last block the operator is slashable in so we check for + // less than or equal to + return status.registered || block.number <= status.slashableUntil; } - /// @inheritdoc IAllocationManager - function getAllocatableMagnitude(address operator, IStrategy strategy) external view returns (uint64) { - (, uint64 curAllocatableMagnitude) = _getFreeAndUsedMagnitude(operator, strategy); - return curAllocatableMagnitude; + /// @inheritdoc IAllocationManagerView + function getRedistributionRecipient( + OperatorSet memory operatorSet + ) public view returns (address) { + // Load the redistribution recipient and return it if set, otherwise return the default burn address. + address redistributionRecipient = _redistributionRecipients[operatorSet.key()]; + return redistributionRecipient == address(0) ? DEFAULT_BURN_ADDRESS : redistributionRecipient; } - /// @dev For an operator, returns up-to-date amounts for current encumbered and available - /// magnitude. Note that these two values will always add up to the operator's max magnitude - /// for the strategy - function _getFreeAndUsedMagnitude( - address operator, - IStrategy strategy - ) internal view returns (uint64 curEncumberedMagnitude, uint64 curAllocatableMagnitude) { - // This method needs to simulate clearing any pending deallocations. - // This roughly mimics the calculations done in `_clearDeallocationQueue` and - // `_getUpdatedAllocation`, while operating on a `curEncumberedMagnitude` - // rather than continually reading/updating state. - curEncumberedMagnitude = encumberedMagnitude[operator][strategy]; - - uint256 length = deallocationQueue[operator][strategy].length(); - for (uint256 i = 0; i < length; ++i) { - bytes32 operatorSetKey = deallocationQueue[operator][strategy].at(i); - Allocation memory allocation = allocations[operator][operatorSetKey][strategy]; + /// @inheritdoc IAllocationManagerView + function getSlasher( + OperatorSet memory operatorSet + ) public view returns (address) { + SlasherParams memory params = _slashers[operatorSet.key()]; - // If we've reached a pending deallocation that isn't completable yet, - // we can stop. Any subsequent modifications will also be uncompletable. - if (block.number < allocation.effectBlock) { - break; - } + address slasher = params.slasher; - // The diff is a deallocation. Add to encumbered magnitude. Note that this is a deallocation - // queue and allocations aren't considered because encumbered magnitude - // is updated as soon as the allocation is created. - curEncumberedMagnitude = _addInt128(curEncumberedMagnitude, allocation.pendingDiff); + // If there is a pending slasher that can be applied, apply it + if (params.effectBlock != 0 && block.number >= params.effectBlock) { + slasher = params.pendingSlasher; } - // The difference between the operator's max magnitude and its encumbered magnitude - // is the magnitude that can be allocated. - curAllocatableMagnitude = _maxMagnitudeHistory[operator][strategy].latest() - curEncumberedMagnitude; - return (curEncumberedMagnitude, curAllocatableMagnitude); + return slasher; } - /// @inheritdoc IAllocationManager - function getMaxMagnitude(address operator, IStrategy strategy) public view returns (uint64) { - return _maxMagnitudeHistory[operator][strategy].latest(); - } - - /// @inheritdoc IAllocationManager - function getMaxMagnitudes( - address operator, - IStrategy[] memory strategies - ) external view returns (uint64[] memory) { - uint64[] memory maxMagnitudes = new uint64[](strategies.length); + /// External View Functions + /// These functions are delegated to the view implementation - for (uint256 i = 0; i < strategies.length; ++i) { - maxMagnitudes[i] = getMaxMagnitude(operator, strategies[i]); - } + /// @inheritdoc IAllocationManagerView + function getOperatorSetCount( + address + ) external view returns (uint256 count) { + _delegateView(viewImplementation); + count; + } - return maxMagnitudes; + /// @inheritdoc IAllocationManagerView + function getAllocatedSets( + address + ) external view returns (OperatorSet[] memory operatorSets) { + _delegateView(viewImplementation); + operatorSets; } - /// @inheritdoc IAllocationManager - function getMaxMagnitudes(address[] memory operators, IStrategy strategy) external view returns (uint64[] memory) { - uint64[] memory maxMagnitudes = new uint64[](operators.length); + /// @inheritdoc IAllocationManagerView + function getAllocatedStrategies( + address, + OperatorSet memory + ) external view returns (IStrategy[] memory strategies) { + _delegateView(viewImplementation); + strategies; + } - for (uint256 i = 0; i < operators.length; ++i) { - maxMagnitudes[i] = getMaxMagnitude(operators[i], strategy); - } + /// @inheritdoc IAllocationManagerView + function getAllocation( + address, + OperatorSet memory, + IStrategy + ) external view returns (Allocation memory allocation) { + _delegateView(viewImplementation); + allocation; + } - return maxMagnitudes; + /// @inheritdoc IAllocationManagerView + function getAllocations( + address[] memory, + OperatorSet memory, + IStrategy + ) external view returns (Allocation[] memory allocations) { + _delegateView(viewImplementation); + allocations; } - /// @inheritdoc IAllocationManager - function getMaxMagnitudesAtBlock( - address operator, - IStrategy[] memory strategies, - uint32 blockNumber - ) external view returns (uint64[] memory) { - uint64[] memory maxMagnitudes = new uint64[](strategies.length); + /// @inheritdoc IAllocationManagerView + function getStrategyAllocations( + address, + IStrategy + ) external view returns (OperatorSet[] memory operatorSets, Allocation[] memory allocations) { + _delegateView(viewImplementation); + operatorSets; + allocations; + } - for (uint256 i = 0; i < strategies.length; ++i) { - maxMagnitudes[i] = _maxMagnitudeHistory[operator][strategies[i]].upperLookup({key: blockNumber}); - } + /// @inheritdoc IAllocationManagerView + function getEncumberedMagnitude(address, IStrategy) external view returns (uint64 encumberedMagnitude) { + _delegateView(viewImplementation); + encumberedMagnitude; + } - return maxMagnitudes; + /// @inheritdoc IAllocationManagerView + function getAllocatableMagnitude(address, IStrategy) external view returns (uint64 allocatableMagnitude) { + _delegateView(viewImplementation); + allocatableMagnitude; } - /// @inheritdoc IAllocationManager - function getAllocationDelay( - address operator - ) public view returns (bool, uint32) { - AllocationDelayInfo memory info = _allocationDelayInfo[operator]; + /// @inheritdoc IAllocationManagerView + function getMaxMagnitude(address, IStrategy) external view returns (uint64 maxMagnitude) { + _delegateView(viewImplementation); + maxMagnitude; + } - uint32 delay = info.delay; - bool isSet = info.isSet; + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudes(address, IStrategy[] calldata) external view returns (uint64[] memory maxMagnitudes) { + _delegateView(viewImplementation); + maxMagnitudes; + } - // If there is a pending delay that can be applied, apply it - if (info.effectBlock != 0 && block.number >= info.effectBlock) { - delay = info.pendingDelay; - isSet = true; - } + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudes(address[] calldata, IStrategy) external view returns (uint64[] memory maxMagnitudes) { + _delegateView(viewImplementation); + maxMagnitudes; + } - return (isSet, delay); + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudesAtBlock( + address, + IStrategy[] calldata, + uint32 + ) external view returns (uint64[] memory maxMagnitudes) { + _delegateView(viewImplementation); + maxMagnitudes; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getRegisteredSets( - address operator - ) public view returns (OperatorSet[] memory) { - uint256 length = registeredSets[operator].length(); - OperatorSet[] memory operatorSets = new OperatorSet[](length); - - for (uint256 i = 0; i < length; ++i) { - operatorSets[i] = OperatorSetLib.decode(registeredSets[operator].at(i)); - } - - return operatorSets; + address + ) external view returns (OperatorSet[] memory operatorSets) { + _delegateView(viewImplementation); + operatorSets; } - /// @inheritdoc IAllocationManager - function isMemberOfOperatorSet(address operator, OperatorSet memory operatorSet) public view returns (bool) { - return _operatorSetMembers[operatorSet.key()].contains(operator); + /// @inheritdoc IAllocationManagerView + function isMemberOfOperatorSet(address, OperatorSet memory) external view returns (bool result) { + _delegateView(viewImplementation); + result; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function isOperatorSet( - OperatorSet memory operatorSet - ) external view returns (bool) { - return _operatorSets[operatorSet.avs].contains(operatorSet.id); + OperatorSet memory + ) external view returns (bool result) { + _delegateView(viewImplementation); + result; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getMembers( - OperatorSet memory operatorSet - ) external view returns (address[] memory) { - return _operatorSetMembers[operatorSet.key()].values(); + OperatorSet memory + ) external view returns (address[] memory operators) { + _delegateView(viewImplementation); + operators; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getMemberCount( - OperatorSet memory operatorSet - ) external view returns (uint256) { - return _operatorSetMembers[operatorSet.key()].length(); + OperatorSet memory + ) external view returns (uint256 memberCount) { + _delegateView(viewImplementation); + memberCount; } - /// @inheritdoc IAllocationManager - function getAVSRegistrar( - address avs - ) public view returns (IAVSRegistrar) { - IAVSRegistrar registrar = _avsRegistrar[avs]; - - return address(registrar) == address(0) ? IAVSRegistrar(avs) : registrar; - } - - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getStrategiesInOperatorSet( - OperatorSet memory operatorSet - ) external view returns (IStrategy[] memory) { - address[] memory values = _operatorSetStrategies[operatorSet.key()].values(); - IStrategy[] memory strategies; - - assembly { - strategies := values - } - - return strategies; + OperatorSet memory + ) external view returns (IStrategy[] memory strategies) { + _delegateView(viewImplementation); + strategies; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getMinimumSlashableStake( - OperatorSet memory operatorSet, - address[] memory operators, - IStrategy[] memory strategies, - uint32 futureBlock + OperatorSet memory, + address[] memory, + IStrategy[] memory, + uint32 ) external view returns (uint256[][] memory slashableStake) { - slashableStake = _getMinimumAllocatedStake(operatorSet, operators, strategies, futureBlock); - - for (uint256 i = 0; i < operators.length; i++) { - // If the operator is not slashable by the opSet, all strategies should have a slashable stake of 0 - if (!isOperatorSlashable(operators[i], operatorSet)) { - for (uint256 j = 0; j < strategies.length; j++) { - slashableStake[i][j] = 0; - } - } - } + _delegateView(viewImplementation); + slashableStake; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getAllocatedStake( - OperatorSet memory operatorSet, - address[] memory operators, - IStrategy[] memory strategies - ) external view returns (uint256[][] memory) { - /// This helper function returns the minimum allocated stake by taking into account deallocations at some `futureBlock`. - /// We use the block.number, as the `futureBlock`, meaning that no **future** deallocations are considered. - return _getMinimumAllocatedStake(operatorSet, operators, strategies, uint32(block.number)); - } - - /// @inheritdoc IAllocationManager - function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { - RegistrationStatus memory status = registrationStatus[operator][operatorSet.key()]; - - // slashableUntil returns the last block the operator is slashable in so we check for - // less than or equal to - return status.registered || block.number <= status.slashableUntil; - } - - /// @inheritdoc IAllocationManager - function getRedistributionRecipient( - OperatorSet memory operatorSet - ) public view returns (address) { - // Load the redistribution recipient and return it if set, otherwise return the default burn address. - address redistributionRecipient = _redistributionRecipients[operatorSet.key()]; - return redistributionRecipient == address(0) ? DEFAULT_BURN_ADDRESS : redistributionRecipient; + OperatorSet memory, + address[] memory, + IStrategy[] memory + ) external view returns (uint256[][] memory slashableStake) { + _delegateView(viewImplementation); + slashableStake; } - /// @inheritdoc IAllocationManager - function isRedistributingOperatorSet( - OperatorSet memory operatorSet - ) public view returns (bool) { - return getRedistributionRecipient(operatorSet) != DEFAULT_BURN_ADDRESS; + /// @inheritdoc IAllocationManagerView + function getPendingSlasher( + OperatorSet memory + ) external view returns (address pendingSlasher, uint32 effectBlock) { + _delegateView(viewImplementation); + pendingSlasher; + effectBlock; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function getSlashCount( - OperatorSet memory operatorSet - ) external view returns (uint256) { - return _slashIds[operatorSet.key()]; + OperatorSet memory + ) external view returns (uint256 slashCount) { + _delegateView(viewImplementation); + slashCount; } - /// @inheritdoc IAllocationManager + /// @inheritdoc IAllocationManagerView function isOperatorRedistributable( - address operator - ) external view returns (bool) { - // Get the registered and allocated sets for the operator. - // We get both sets, since: - // - Upon registration the operator allocation will be pending to a redistributing operator set, and as such not yet in RegisteredSets. - // - Upon deregistration the operator is removed from RegisteredSets, but is still allocated. - OperatorSet[] memory registeredSets = getRegisteredSets(operator); - OperatorSet[] memory allocatedSets = getAllocatedSets(operator); - - // Check if the operator is redistributable from any of the registered or allocated sets - return - _isOperatorRedistributable(operator, registeredSets) || _isOperatorRedistributable(operator, allocatedSets); + address + ) external view returns (bool result) { + _delegateView(viewImplementation); + result; } } diff --git a/src/contracts/core/AllocationManagerView.sol b/src/contracts/core/AllocationManagerView.sol new file mode 100644 index 0000000000..dda51e55b7 --- /dev/null +++ b/src/contracts/core/AllocationManagerView.sol @@ -0,0 +1,531 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.29; // Minimum for `layout at` directive. + +import "./storage/AllocationManagerStorage.sol"; + +/// @notice Non-state mutating view functions, (static) called by the `AllocationManager`. +/// @dev The `layout at 151` directive specifies that `AllocationManagerStorage` should be placed +/// starting at storage slot 151. This slot number is calculated based on the storage layout +/// of the main `AllocationManager` contract, which inherits from multiple contracts in this order: +/// +/// 1. Initializable +/// 2. Deprecated_OwnableUpgradeable +/// 3. Pausable +/// 4. AllocationManagerStorage +/// +/// Since `AllocationManagerView` only needs access to the storage variables from +/// `AllocationManagerStorage` (without the other mixins), it uses `layout at 151` to +/// align its storage layout with the main `AllocationManager` contract. +contract AllocationManagerView is IAllocationManagerView, AllocationManagerStorage layout at 151 { + using DoubleEndedQueue for DoubleEndedQueue.Bytes32Deque; + using Snapshots for Snapshots.DefaultWadHistory; + using OperatorSetLib for OperatorSet; + using SlashingLib for uint256; + using EnumerableSet for *; + using SafeCast for *; + + /** + * + * INITIALIZING FUNCTIONS + * + */ + + /** + * @dev Initializes the DelegationManager address, the deallocation delay, and the allocation configuration delay. + */ + constructor( + IDelegationManager _delegation, + IStrategy _eigenStrategy, + uint32 _DEALLOCATION_DELAY, + uint32 _ALLOCATION_CONFIGURATION_DELAY + ) AllocationManagerStorage(_delegation, _eigenStrategy, _DEALLOCATION_DELAY, _ALLOCATION_CONFIGURATION_DELAY) {} + + /** + * + * INTERNAL FUNCTIONS + * + */ + + /** + * @dev For an operator set, get the operator's effective allocated magnitude. + * If the operator set has a pending deallocation that can be completed at the + * current block number, this method returns a view of the allocation as if the deallocation + * was completed. + * @return info the effective allocated and pending magnitude for the operator set, and + * the effective encumbered magnitude for all operator sets belonging to this strategy + */ + function _getUpdatedAllocation( + address operator, + bytes32 operatorSetKey, + IStrategy strategy + ) internal view returns (StrategyInfo memory, Allocation memory) { + StrategyInfo memory info = StrategyInfo({ + maxMagnitude: _maxMagnitudeHistory[operator][strategy].latest(), + encumberedMagnitude: encumberedMagnitude[operator][strategy] + }); + + Allocation memory allocation = allocations[operator][operatorSetKey][strategy]; + + // If the pending change can't be completed yet, return as-is + if (block.number < allocation.effectBlock) { + return (info, allocation); + } + + // Otherwise, complete the pending change and return updated info + allocation.currentMagnitude = _addInt128(allocation.currentMagnitude, allocation.pendingDiff); + + // If the completed change was a deallocation, update used magnitude + if (allocation.pendingDiff < 0) { + info.encumberedMagnitude = _addInt128(info.encumberedMagnitude, allocation.pendingDiff); + } + + allocation.effectBlock = 0; + allocation.pendingDiff = 0; + + return (info, allocation); + } + + /** + * @dev Returns the minimum allocated stake at the future block. + * @param operatorSet The operator set to get the minimum allocated stake for. + * @param operators The operators to get the minimum allocated stake for. + * @param strategies The strategies to get the minimum allocated stake for. + * @param futureBlock The future block to get the minimum allocated stake for. + */ + function _getMinimumAllocatedStake( + OperatorSet memory operatorSet, + address[] memory operators, + IStrategy[] memory strategies, + uint32 futureBlock + ) internal view returns (uint256[][] memory allocatedStake) { + allocatedStake = new uint256[][](operators.length); + uint256[][] memory delegatedStake = delegation.getOperatorsShares(operators, strategies); + + for (uint256 i = 0; i < operators.length; i++) { + address operator = operators[i]; + + allocatedStake[i] = new uint256[](strategies.length); + + for (uint256 j = 0; j < strategies.length; j++) { + IStrategy strategy = strategies[j]; + + // Fetch the max magnitude and allocation for the operator/strategy. + // Prevent division by 0 if needed. This mirrors the "FullySlashed" checks + // in the DelegationManager + uint64 maxMagnitude = _maxMagnitudeHistory[operator][strategy].latest(); + if (maxMagnitude == 0) { + continue; + } + + Allocation memory alloc = getAllocation(operator, operatorSet, strategy); + + // If the pending change takes effect before `futureBlock`, include it in `currentMagnitude` + // However, ONLY include the pending change if it is a deallocation, since this method + // is supposed to return the minimum slashable stake between now and `futureBlock` + if (alloc.effectBlock <= futureBlock && alloc.pendingDiff < 0) { + alloc.currentMagnitude = _addInt128(alloc.currentMagnitude, alloc.pendingDiff); + } + + uint256 slashableProportion = uint256(alloc.currentMagnitude).divWad(maxMagnitude); + allocatedStake[i][j] = delegatedStake[i][j].mulWad(slashableProportion); + } + } + } + + /// @dev Use safe casting when downcasting to uint64 + function _addInt128(uint64 a, int128 b) internal pure returns (uint64) { + return uint256(int256(int128(uint128(a)) + b)).toUint64(); + } + + /** + * @notice Helper function to check if an operator is redistributable from a list of operator sets + * @param operator The operator to check + * @param operatorSets The list of operator sets to check + * @return True if the operator is redistributable from any of the operator sets, false otherwise + */ + function _isOperatorRedistributable( + address operator, + OperatorSet[] memory operatorSets + ) internal view returns (bool) { + for (uint256 i = 0; i < operatorSets.length; ++i) { + if (isOperatorSlashable(operator, operatorSets[i]) && isRedistributingOperatorSet(operatorSets[i])) { + return true; + } + } + return false; + } + + /** + * + * VIEW FUNCTIONS + * + */ + + /// @inheritdoc IAllocationManagerView + function getOperatorSetCount( + address avs + ) external view returns (uint256) { + return _operatorSets[avs].length(); + } + + /// @inheritdoc IAllocationManagerView + function getAllocatedSets( + address operator + ) public view returns (OperatorSet[] memory) { + uint256 length = allocatedSets[operator].length(); + + OperatorSet[] memory operatorSets = new OperatorSet[](length); + for (uint256 i = 0; i < length; i++) { + operatorSets[i] = OperatorSetLib.decode(allocatedSets[operator].at(i)); + } + + return operatorSets; + } + + /// @inheritdoc IAllocationManagerView + function getAllocatedStrategies( + address operator, + OperatorSet memory operatorSet + ) external view returns (IStrategy[] memory) { + address[] memory values = allocatedStrategies[operator][operatorSet.key()].values(); + IStrategy[] memory strategies; + + assembly { + strategies := values + } + + return strategies; + } + + /// @inheritdoc IAllocationManagerView + function getAllocation( + address operator, + OperatorSet memory operatorSet, + IStrategy strategy + ) public view returns (Allocation memory) { + (, Allocation memory allocation) = _getUpdatedAllocation(operator, operatorSet.key(), strategy); + + return allocation; + } + + /// @inheritdoc IAllocationManagerView + function getAllocations( + address[] memory operators, + OperatorSet memory operatorSet, + IStrategy strategy + ) external view returns (Allocation[] memory) { + Allocation[] memory _allocations = new Allocation[](operators.length); + + for (uint256 i = 0; i < operators.length; i++) { + _allocations[i] = getAllocation(operators[i], operatorSet, strategy); + } + + return _allocations; + } + + /// @inheritdoc IAllocationManagerView + function getStrategyAllocations( + address operator, + IStrategy strategy + ) external view returns (OperatorSet[] memory, Allocation[] memory) { + uint256 length = allocatedSets[operator].length(); + + OperatorSet[] memory operatorSets = new OperatorSet[](length); + Allocation[] memory _allocations = new Allocation[](length); + + for (uint256 i = 0; i < length; i++) { + OperatorSet memory operatorSet = OperatorSetLib.decode(allocatedSets[operator].at(i)); + + operatorSets[i] = operatorSet; + _allocations[i] = getAllocation(operator, operatorSet, strategy); + } + + return (operatorSets, _allocations); + } + + /// @inheritdoc IAllocationManagerView + function getEncumberedMagnitude(address operator, IStrategy strategy) external view returns (uint64) { + (uint64 curEncumberedMagnitude,) = _getFreeAndUsedMagnitude(operator, strategy); + return curEncumberedMagnitude; + } + + /// @inheritdoc IAllocationManagerView + function getAllocatableMagnitude(address operator, IStrategy strategy) external view returns (uint64) { + (, uint64 curAllocatableMagnitude) = _getFreeAndUsedMagnitude(operator, strategy); + return curAllocatableMagnitude; + } + + /// @dev For an operator, returns up-to-date amounts for current encumbered and available + /// magnitude. Note that these two values will always add up to the operator's max magnitude + /// for the strategy + function _getFreeAndUsedMagnitude( + address operator, + IStrategy strategy + ) internal view returns (uint64 curEncumberedMagnitude, uint64 curAllocatableMagnitude) { + // This method needs to simulate clearing any pending deallocations. + // This roughly mimics the calculations done in `_clearDeallocationQueue` and + // `_getUpdatedAllocation`, while operating on a `curEncumberedMagnitude` + // rather than continually reading/updating state. + curEncumberedMagnitude = encumberedMagnitude[operator][strategy]; + + uint256 length = deallocationQueue[operator][strategy].length(); + for (uint256 i = 0; i < length; ++i) { + bytes32 operatorSetKey = deallocationQueue[operator][strategy].at(i); + Allocation memory allocation = allocations[operator][operatorSetKey][strategy]; + + // If we've reached a pending deallocation that isn't completable yet, + // we can stop. Any subsequent modifications will also be uncompletable. + if (block.number < allocation.effectBlock) { + break; + } + + // The diff is a deallocation. Add to encumbered magnitude. Note that this is a deallocation + // queue and allocations aren't considered because encumbered magnitude + // is updated as soon as the allocation is created. + curEncumberedMagnitude = _addInt128(curEncumberedMagnitude, allocation.pendingDiff); + } + + // The difference between the operator's max magnitude and its encumbered magnitude + // is the magnitude that can be allocated. + curAllocatableMagnitude = _maxMagnitudeHistory[operator][strategy].latest() - curEncumberedMagnitude; + return (curEncumberedMagnitude, curAllocatableMagnitude); + } + + /// @inheritdoc IAllocationManagerView + function getMaxMagnitude(address operator, IStrategy strategy) public view returns (uint64) { + return _maxMagnitudeHistory[operator][strategy].latest(); + } + + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudes( + address operator, + IStrategy[] memory strategies + ) external view returns (uint64[] memory) { + uint64[] memory maxMagnitudes = new uint64[](strategies.length); + + for (uint256 i = 0; i < strategies.length; ++i) { + maxMagnitudes[i] = getMaxMagnitude(operator, strategies[i]); + } + + return maxMagnitudes; + } + + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudes(address[] memory operators, IStrategy strategy) external view returns (uint64[] memory) { + uint64[] memory maxMagnitudes = new uint64[](operators.length); + + for (uint256 i = 0; i < operators.length; ++i) { + maxMagnitudes[i] = getMaxMagnitude(operators[i], strategy); + } + + return maxMagnitudes; + } + + /// @inheritdoc IAllocationManagerView + function getMaxMagnitudesAtBlock( + address operator, + IStrategy[] memory strategies, + uint32 blockNumber + ) external view returns (uint64[] memory) { + uint64[] memory maxMagnitudes = new uint64[](strategies.length); + + for (uint256 i = 0; i < strategies.length; ++i) { + maxMagnitudes[i] = _maxMagnitudeHistory[operator][strategies[i]].upperLookup({key: blockNumber}); + } + + return maxMagnitudes; + } + + /// @inheritdoc IAllocationManagerView + function getAllocationDelay( + address operator + ) public view returns (bool, uint32) { + AllocationDelayInfo memory info = _allocationDelayInfo[operator]; + + uint32 delay = info.delay; + bool isSet = info.isSet; + + // If there is a pending delay that can be applied, apply it + if (info.effectBlock != 0 && block.number >= info.effectBlock) { + delay = info.pendingDelay; + isSet = true; + } + + return (isSet, delay); + } + + /// @inheritdoc IAllocationManagerView + function getRegisteredSets( + address operator + ) public view returns (OperatorSet[] memory) { + uint256 length = registeredSets[operator].length(); + OperatorSet[] memory operatorSets = new OperatorSet[](length); + + for (uint256 i = 0; i < length; ++i) { + operatorSets[i] = OperatorSetLib.decode(registeredSets[operator].at(i)); + } + + return operatorSets; + } + + /// @inheritdoc IAllocationManagerView + function isMemberOfOperatorSet(address operator, OperatorSet memory operatorSet) public view returns (bool) { + return _operatorSetMembers[operatorSet.key()].contains(operator); + } + + /// @inheritdoc IAllocationManagerView + function isOperatorSet( + OperatorSet memory operatorSet + ) external view returns (bool) { + return _operatorSets[operatorSet.avs].contains(operatorSet.id); + } + + /// @inheritdoc IAllocationManagerView + function getMembers( + OperatorSet memory operatorSet + ) external view returns (address[] memory) { + return _operatorSetMembers[operatorSet.key()].values(); + } + + /// @inheritdoc IAllocationManagerView + function getMemberCount( + OperatorSet memory operatorSet + ) external view returns (uint256) { + return _operatorSetMembers[operatorSet.key()].length(); + } + + /// @inheritdoc IAllocationManagerView + function getAVSRegistrar( + address avs + ) public view returns (IAVSRegistrar) { + IAVSRegistrar registrar = _avsRegistrar[avs]; + + return address(registrar) == address(0) ? IAVSRegistrar(avs) : registrar; + } + + /// @inheritdoc IAllocationManagerView + function getStrategiesInOperatorSet( + OperatorSet memory operatorSet + ) external view returns (IStrategy[] memory) { + address[] memory values = _operatorSetStrategies[operatorSet.key()].values(); + IStrategy[] memory strategies; + + assembly { + strategies := values + } + + return strategies; + } + + /// @inheritdoc IAllocationManagerView + function getMinimumSlashableStake( + OperatorSet memory operatorSet, + address[] memory operators, + IStrategy[] memory strategies, + uint32 futureBlock + ) external view returns (uint256[][] memory slashableStake) { + slashableStake = _getMinimumAllocatedStake(operatorSet, operators, strategies, futureBlock); + + for (uint256 i = 0; i < operators.length; i++) { + // If the operator is not slashable by the opSet, all strategies should have a slashable stake of 0 + if (!isOperatorSlashable(operators[i], operatorSet)) { + for (uint256 j = 0; j < strategies.length; j++) { + slashableStake[i][j] = 0; + } + } + } + } + + /// @inheritdoc IAllocationManagerView + function getAllocatedStake( + OperatorSet memory operatorSet, + address[] memory operators, + IStrategy[] memory strategies + ) external view returns (uint256[][] memory) { + /// This helper function returns the minimum allocated stake by taking into account deallocations at some `futureBlock`. + /// We use the block.number, as the `futureBlock`, meaning that no **future** deallocations are considered. + return _getMinimumAllocatedStake(operatorSet, operators, strategies, uint32(block.number)); + } + + /// @inheritdoc IAllocationManagerView + function isOperatorSlashable(address operator, OperatorSet memory operatorSet) public view returns (bool) { + RegistrationStatus memory status = registrationStatus[operator][operatorSet.key()]; + + // slashableUntil returns the last block the operator is slashable in so we check for + // less than or equal to + return status.registered || block.number <= status.slashableUntil; + } + + /// @inheritdoc IAllocationManagerView + function getRedistributionRecipient( + OperatorSet memory operatorSet + ) public view returns (address) { + // Load the redistribution recipient and return it if set, otherwise return the default burn address. + address redistributionRecipient = _redistributionRecipients[operatorSet.key()]; + return redistributionRecipient == address(0) ? DEFAULT_BURN_ADDRESS : redistributionRecipient; + } + + /// @inheritdoc IAllocationManagerView + function isRedistributingOperatorSet( + OperatorSet memory operatorSet + ) public view returns (bool) { + return getRedistributionRecipient(operatorSet) != DEFAULT_BURN_ADDRESS; + } + + /// @inheritdoc IAllocationManagerView + function getSlashCount( + OperatorSet memory operatorSet + ) external view returns (uint256) { + return _slashIds[operatorSet.key()]; + } + + /// @inheritdoc IAllocationManagerView + function isOperatorRedistributable( + address operator + ) external view returns (bool) { + // Get the registered and allocated sets for the operator. + // We get both sets, since: + // - Upon registration the operator allocation will be pending to a redistributing operator set, and as such not yet in RegisteredSets. + // - Upon deregistration the operator is removed from RegisteredSets, but is still allocated. + OperatorSet[] memory registeredSets = getRegisteredSets(operator); + OperatorSet[] memory allocatedSets = getAllocatedSets(operator); + + // Check if the operator is redistributable from any of the registered or allocated sets + return + _isOperatorRedistributable(operator, registeredSets) || _isOperatorRedistributable(operator, allocatedSets); + } + + /// @inheritdoc IAllocationManagerView + function getPendingSlasher( + OperatorSet memory operatorSet + ) external view returns (address, uint32) { + // Initialize the pending slasher and effect block to the address(0) and 0 respectively + address pendingSlasher; + uint32 effectBlock; + + // If there is a pending slasher, set it + SlasherParams memory params = _slashers[operatorSet.key()]; + if (block.number < params.effectBlock) { + pendingSlasher = params.pendingSlasher; + effectBlock = params.effectBlock; + } + + return (pendingSlasher, effectBlock); + } + + /// @inheritdoc IAllocationManagerView + function getSlasher( + OperatorSet memory operatorSet + ) public view returns (address) { + SlasherParams memory params = _slashers[operatorSet.key()]; + + address slasher = params.slasher; + + // If there is a pending slasher that can be applied, apply it + if (params.effectBlock != 0 && block.number >= params.effectBlock) { + slasher = params.pendingSlasher; + } + + return slasher; + } +} diff --git a/src/contracts/core/DelegationManager.sol b/src/contracts/core/DelegationManager.sol index 4cf592555a..bb1516baf9 100644 --- a/src/contracts/core/DelegationManager.sol +++ b/src/contracts/core/DelegationManager.sol @@ -10,7 +10,7 @@ import "../mixins/Deprecated_OwnableUpgradeable.sol"; import "../permissions/Pausable.sol"; import "../libraries/SlashingLib.sol"; import "../libraries/Snapshots.sol"; -import "./DelegationManagerStorage.sol"; +import "./storage/DelegationManagerStorage.sol"; /** * @title DelegationManager @@ -159,7 +159,7 @@ contract DelegationManager is if (msg.sender != staker) { address operator = delegatedTo[staker]; - require(_checkCanCall(operator) || msg.sender == delegationApprover(operator), CallerCannotUndelegate()); + require(_canCall(operator) || msg.sender == delegationApprover(operator), CallerCannotUndelegate()); emit StakerForceUndelegated(staker, operator); } @@ -295,7 +295,7 @@ contract DelegationManager is newMaxMagnitude: newMaxMagnitude }); - uint256 scaledSharesSlashedFromQueue = _getSlashableSharesInQueue({ + uint256 operatorSharesSlashedFromQueue = _getSlashableSharesInQueue({ operator: operator, strategy: strategy, prevMaxMagnitude: prevMaxMagnitude, @@ -304,7 +304,7 @@ contract DelegationManager is // Calculate the total deposit shares to slash (burn or redistribute) - slashed operator shares plus still-slashable // shares sitting in the withdrawal queue. - totalDepositSharesToSlash = operatorSharesSlashed + scaledSharesSlashedFromQueue; + totalDepositSharesToSlash = operatorSharesSlashed + operatorSharesSlashedFromQueue; // Remove shares from operator _decreaseDelegation({ @@ -377,8 +377,8 @@ contract DelegationManager is // forgefmt: disable-next-item _increaseDelegation({ - operator: operator, - staker: staker, + operator: operator, + staker: staker, strategy: strategies[i], prevDepositShares: uint256(0), addedShares: withdrawableShares[i], @@ -780,6 +780,12 @@ contract DelegationManager is uint64 prevMaxMagnitude, uint64 newMaxMagnitude ) internal view returns (uint256) { + // A maxMagnitude of 0 means the operator has been fully slashed (100%). + // There's nothing left to slash, so slashable shares in the queue is 0. + if (prevMaxMagnitude == 0) { + return 0; + } + // We want ALL shares added to the withdrawal queue in the window [block.number - MIN_WITHDRAWAL_DELAY_BLOCKS, block.number] // // To get this, we take the current shares in the withdrawal queue and subtract the number of shares @@ -793,8 +799,25 @@ contract DelegationManager is // less than or equal to MIN_WITHDRAWAL_DELAY_BLOCKS ago. These shares are still slashable. uint256 scaledSharesAdded = curQueuedScaledShares - prevQueuedScaledShares; - return SlashingLib.scaleForBurning({ - scaledShares: scaledSharesAdded, + // Convert scaled shares to slashed withdrawable shares. + // + // @dev Math derivation (where n is the pre-slash state): + // - depositShares (s_n): shares stored in StrategyManager/EigenPodManager + // - depositScalingFactor (k_n): staker's scaling factor, initialized to 1 + // - prevMaxMagnitude (m_n): operator's previous magnitude, starts at WAD, decreases on slash + // - newMaxMagnitude (m_(n+1)): operator's new magnitude, <= prevMaxMagnitude + // - operatorShares: s_n * k_n * m_n (withdrawable shares) + // - scaledShares: s_n * k_n (stored when queueing withdrawal) + // + // We want: operatorShares slashed = s_n * k_n * m_n - s_n * k_n * m_(n+1) + // + // calcSlashedAmount computes: opShares - opShares * m_(n+1) / m_n + // = s_n * k_n * m_n - s_n * k_n * m_n * m_(n+1) / m_n + // = s_n * k_n * m_n - s_n * k_n * m_(n+1) ✓ + // + // So we pass: operatorShares = scaledShares * m_n = s_n * k_n * m_n + return SlashingLib.calcSlashedAmount({ + operatorShares: scaledSharesAdded.mulWad(prevMaxMagnitude), prevMaxMagnitude: prevMaxMagnitude, newMaxMagnitude: newMaxMagnitude }); @@ -1053,11 +1076,11 @@ contract DelegationManager is return _calculateSignableDigest( keccak256( abi.encode( - DELEGATION_APPROVAL_TYPEHASH, - approver, - staker, - operator, - approverSalt, + DELEGATION_APPROVAL_TYPEHASH, + approver, + staker, + operator, + approverSalt, expiry ) ) diff --git a/src/contracts/core/ProtocolRegistry.sol b/src/contracts/core/ProtocolRegistry.sol new file mode 100644 index 0000000000..ff98b5b567 --- /dev/null +++ b/src/contracts/core/ProtocolRegistry.sol @@ -0,0 +1,161 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; +import "@openzeppelin-upgrades/contracts/access/AccessControlEnumerableUpgradeable.sol"; +import "../interfaces/IPausable.sol"; +import "./storage/ProtocolRegistryStorage.sol"; + +contract ProtocolRegistry is Initializable, AccessControlEnumerableUpgradeable, ProtocolRegistryStorage { + using ShortStringsUpgradeable for *; + using EnumerableMap for EnumerableMap.UintToAddressMap; + + /** + * + * INITIALIZING FUNCTIONS + * + */ + constructor() ProtocolRegistryStorage() { + _disableInitializers(); + } + + /// @inheritdoc IProtocolRegistry + function initialize(address initialAdmin, address pauserMultisig) external initializer { + _grantRole(DEFAULT_ADMIN_ROLE, initialAdmin); + _grantRole(PAUSER_ROLE, pauserMultisig); + } + + /** + * + * INITIALIZING FUNCTIONS + * + */ + + /// @inheritdoc IProtocolRegistry + function ship( + address[] calldata addresses, + DeploymentConfig[] calldata configs, + string[] calldata names, + string calldata semanticVersion + ) external onlyRole(DEFAULT_ADMIN_ROLE) { + // Update the semantic version. + _updateSemanticVersion(semanticVersion); + for (uint256 i = 0; i < addresses.length; ++i) { + // Append each provided + _appendDeployment(addresses[i], configs[i], names[i]); + } + } + + /// @inheritdoc IProtocolRegistry + function configure(address addr, DeploymentConfig calldata config) external onlyRole(DEFAULT_ADMIN_ROLE) { + // Update the config + _deploymentConfigs[addr] = config; + // Emit the event. + emit DeploymentConfigured(addr, config); + } + + /// @inheritdoc IProtocolRegistry + function pauseAll() external onlyRole(PAUSER_ROLE) { + uint256 length = totalDeployments(); + // Iterate over all stored deployments. + for (uint256 i = 0; i < length; ++i) { + (, address addr) = _deployments.at(i); + DeploymentConfig memory config = _deploymentConfigs[addr]; + // Only attempt to pause deployments marked as pausable. + if (config.pausable && !config.deprecated) { + IPausable(addr).pauseAll(); + } + } + } + + /** + * + * HELPER FUNCTIONS + * + */ + + /// @dev Updates the semantic version of the protocol. + function _updateSemanticVersion( + string calldata semanticVersion + ) internal { + string memory previousSemanticVersion = _semanticVersion.toString(); + _semanticVersion = semanticVersion.toShortString(); + emit SemanticVersionUpdated(previousSemanticVersion, semanticVersion); + } + + /// @dev Appends a deployment. + function _appendDeployment(address addr, DeploymentConfig calldata config, string calldata name) internal { + // Store name => address mapping + _deployments.set({key: _unwrap(name.toShortString()), value: addr}); + // Store deployment config + _deploymentConfigs[addr] = config; + // Emit the events. + emit DeploymentShipped(addr, config); + } + + /// @dev Unwraps a ShortString to a uint256. + function _unwrap( + ShortString shortString + ) internal pure returns (uint256) { + return uint256(ShortString.unwrap(shortString)); + } + + /** + * + * VIEW FUNCTIONS + * + */ + + /// @inheritdoc IProtocolRegistry + function version() external view virtual returns (string memory) { + return _semanticVersion.toString(); + } + + /// @inheritdoc IProtocolRegistry + function majorVersion() external view returns (string memory) { + bytes memory v = bytes(_semanticVersion.toString()); + return string(abi.encodePacked(v[0])); + } + + /// @inheritdoc IProtocolRegistry + function getAddress( + string calldata name + ) external view returns (address) { + return _deployments.get(_unwrap(name.toShortString())); + } + + /// @inheritdoc IProtocolRegistry + function getDeployment( + string calldata name + ) external view returns (address addr, DeploymentConfig memory config) { + addr = _deployments.get(_unwrap(name.toShortString())); + config = _deploymentConfigs[addr]; + return (addr, config); + } + + /// @inheritdoc IProtocolRegistry + function getAllDeployments() + external + view + returns (string[] memory names, address[] memory addresses, DeploymentConfig[] memory configs) + { + uint256 length = totalDeployments(); + names = new string[](length); + addresses = new address[](length); + configs = new DeploymentConfig[](length); + + for (uint256 i = 0; i < length; ++i) { + (uint256 nameShortString, address addr) = _deployments.at(i); + names[i] = ShortString.wrap(bytes32(nameShortString)).toString(); + addresses[i] = addr; + configs[i] = _deploymentConfigs[addr]; + } + + return (names, addresses, configs); + } + + /// @inheritdoc IProtocolRegistry + function totalDeployments() public view returns (uint256) { + return _deployments.length(); + } +} diff --git a/src/contracts/core/ReleaseManager.sol b/src/contracts/core/ReleaseManager.sol index 35fa604f88..5e91e9131a 100644 --- a/src/contracts/core/ReleaseManager.sol +++ b/src/contracts/core/ReleaseManager.sol @@ -3,10 +3,9 @@ pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "../mixins/PermissionControllerMixin.sol"; -import "../mixins/SemVerMixin.sol"; -import "./ReleaseManagerStorage.sol"; +import "./storage/ReleaseManagerStorage.sol"; -contract ReleaseManager is Initializable, ReleaseManagerStorage, PermissionControllerMixin, SemVerMixin { +contract ReleaseManager is Initializable, ReleaseManagerStorage, PermissionControllerMixin { using OperatorSetLib for OperatorSet; /** @@ -15,9 +14,8 @@ contract ReleaseManager is Initializable, ReleaseManagerStorage, PermissionContr * */ constructor( - IPermissionController _permissionController, - string memory _version - ) PermissionControllerMixin(_permissionController) SemVerMixin(_version) { + IPermissionController _permissionController + ) PermissionControllerMixin(_permissionController) { _disableInitializers(); } diff --git a/src/contracts/core/RewardsCoordinator.sol b/src/contracts/core/RewardsCoordinator.sol index ac9a8b47fe..03309ba632 100644 --- a/src/contracts/core/RewardsCoordinator.sol +++ b/src/contracts/core/RewardsCoordinator.sol @@ -8,9 +8,8 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../libraries/Merkle.sol"; import "../permissions/Pausable.sol"; -import "./RewardsCoordinatorStorage.sol"; +import "./storage/RewardsCoordinatorStorage.sol"; import "../mixins/PermissionControllerMixin.sol"; -import "../mixins/SemVerMixin.sol"; /** * @title RewardsCoordinator @@ -27,8 +26,7 @@ contract RewardsCoordinator is Pausable, ReentrancyGuardUpgradeable, RewardsCoordinatorStorage, - PermissionControllerMixin, - SemVerMixin + PermissionControllerMixin { using SafeERC20 for IERC20; using OperatorSetLib for OperatorSet; @@ -59,7 +57,6 @@ contract RewardsCoordinator is ) Pausable(params.pauserRegistry) PermissionControllerMixin(params.permissionController) - SemVerMixin(params.version) { _disableInitializers(); } diff --git a/src/contracts/core/StrategyManager.sol b/src/contracts/core/StrategyManager.sol index 02f6717ea7..117e6906c1 100644 --- a/src/contracts/core/StrategyManager.sol +++ b/src/contracts/core/StrategyManager.sol @@ -9,7 +9,7 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../mixins/SignatureUtilsMixin.sol"; import "../interfaces/IEigenPodManager.sol"; import "../permissions/Pausable.sol"; -import "./StrategyManagerStorage.sol"; +import "./storage/StrategyManagerStorage.sol"; /** * @title The primary entry- and exit-point for funds into and out of EigenLayer. diff --git a/src/contracts/core/AVSDirectoryStorage.sol b/src/contracts/core/storage/AVSDirectoryStorage.sol similarity index 96% rename from src/contracts/core/AVSDirectoryStorage.sol rename to src/contracts/core/storage/AVSDirectoryStorage.sol index 0b9237a606..84ee2f8756 100644 --- a/src/contracts/core/AVSDirectoryStorage.sol +++ b/src/contracts/core/storage/AVSDirectoryStorage.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../interfaces/IAVSDirectory.sol"; -import "../interfaces/IDelegationManager.sol"; +import "../../interfaces/IAVSDirectory.sol"; +import "../../interfaces/IDelegationManager.sol"; abstract contract AVSDirectoryStorage is IAVSDirectory { // Constants diff --git a/src/contracts/core/AllocationManagerStorage.sol b/src/contracts/core/storage/AllocationManagerStorage.sol similarity index 90% rename from src/contracts/core/AllocationManagerStorage.sol rename to src/contracts/core/storage/AllocationManagerStorage.sol index c87c6f1bb5..c5c8debb4b 100644 --- a/src/contracts/core/AllocationManagerStorage.sol +++ b/src/contracts/core/storage/AllocationManagerStorage.sol @@ -4,11 +4,10 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/utils/structs/DoubleEndedQueue.sol"; -import "../interfaces/IAllocationManager.sol"; -import "../interfaces/IDelegationManager.sol"; -import {Snapshots} from "../libraries/Snapshots.sol"; +import "../../interfaces/IAllocationManager.sol"; +import {Snapshots} from "../../libraries/Snapshots.sol"; -abstract contract AllocationManagerStorage is IAllocationManager { +abstract contract AllocationManagerStorage is IAllocationManagerStorage { using Snapshots for Snapshots.DefaultWadHistory; // Constants @@ -64,7 +63,7 @@ abstract contract AllocationManagerStorage is IAllocationManager { /// OPERATOR => OPERATOR SET (REGISTRATION/DEREGISTRATION) /// @notice Returns the allocation delay info for each `operator`; the delay and whether or not it's previously been set. - mapping(address operator => AllocationDelayInfo) internal _allocationDelayInfo; + mapping(address operator => IAllocationManagerTypes.AllocationDelayInfo) internal _allocationDelayInfo; /// @dev Lists the operator sets the operator is registered for. Note that an operator /// can be registered without allocated stake. Likewise, an operator can allocate @@ -75,15 +74,18 @@ abstract contract AllocationManagerStorage is IAllocationManager { mapping(address operator => EnumerableSet.Bytes32Set) internal allocatedSets; /// @dev Contains the operator's registration status for an operator set. - mapping(address operator => mapping(bytes32 operatorSetKey => RegistrationStatus)) internal registrationStatus; + mapping(address operator => mapping(bytes32 operatorSetKey => IAllocationManagerTypes.RegistrationStatus)) internal + registrationStatus; /// @dev For an operator set, lists all strategies an operator has outstanding allocations from. mapping(address operator => mapping(bytes32 operatorSetKey => EnumerableSet.AddressSet)) internal allocatedStrategies; /// @dev For an operator set and strategy, the current allocated magnitude and any pending modification - mapping(address operator => mapping(bytes32 operatorSetKey => mapping(IStrategy strategy => Allocation))) internal - allocations; + mapping( + address operator + => mapping(bytes32 operatorSetKey => mapping(IStrategy strategy => IAllocationManagerTypes.Allocation)) + ) internal allocations; /// OPERATOR => STRATEGY (MAX/USED AND DEALLOCATIONS) @@ -113,6 +115,9 @@ abstract contract AllocationManagerStorage is IAllocationManager { /// returns `DEFAULT_BURN_ADDRESS` mapping(bytes32 operatorSetKey => address redistributionAddr) internal _redistributionRecipients; + /// @notice Returns the address that can slash a given operator set. + mapping(bytes32 operatorSetKey => SlasherParams params) internal _slashers; + // Construction constructor( @@ -132,5 +137,5 @@ abstract contract AllocationManagerStorage is IAllocationManager { * variables without shifting down storage in the inheritance chain. * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps */ - uint256[34] private __gap; + uint256[33] private __gap; } diff --git a/src/contracts/core/DelegationManagerStorage.sol b/src/contracts/core/storage/DelegationManagerStorage.sol similarity index 96% rename from src/contracts/core/DelegationManagerStorage.sol rename to src/contracts/core/storage/DelegationManagerStorage.sol index 8e38b4c8d1..05f56a05a6 100644 --- a/src/contracts/core/DelegationManagerStorage.sol +++ b/src/contracts/core/storage/DelegationManagerStorage.sol @@ -3,12 +3,12 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import "../libraries/SlashingLib.sol"; -import "../interfaces/IDelegationManager.sol"; -import "../interfaces/IEigenPodManager.sol"; -import "../interfaces/IAllocationManager.sol"; +import "../../libraries/SlashingLib.sol"; +import "../../interfaces/IDelegationManager.sol"; +import "../../interfaces/IEigenPodManager.sol"; +import "../../interfaces/IAllocationManager.sol"; -import {Snapshots} from "../libraries/Snapshots.sol"; +import {Snapshots} from "../../libraries/Snapshots.sol"; /** * @title Storage variables for the `DelegationManager` contract. diff --git a/src/contracts/core/storage/ProtocolRegistryStorage.sol b/src/contracts/core/storage/ProtocolRegistryStorage.sol new file mode 100644 index 0000000000..5ff1ab5d62 --- /dev/null +++ b/src/contracts/core/storage/ProtocolRegistryStorage.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "@openzeppelin-upgrades/contracts/utils/ShortStringsUpgradeable.sol"; +import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; +import "../../interfaces/IProtocolRegistry.sol"; + +abstract contract ProtocolRegistryStorage is IProtocolRegistry { + /** + * + * CONSTANTS + * + */ + + /// @inheritdoc IProtocolRegistry + bytes32 public constant PAUSER_ROLE = hex"01"; + + /** + * + * MUTABLE STATE + * + */ + + /// @notice Returns the semantic version of the protocol. + ShortString internal _semanticVersion; + + /// @notice Maps deployment name hashes to addresses (enumerable for iteration). + EnumerableMap.UintToAddressMap internal _deployments; + + /// @notice Maps deployment addresses to their configurations. + mapping(address => DeploymentConfig) internal _deploymentConfigs; + + /// @dev This empty reserved space is put in place to allow future versions to add new + /// variables without shifting down storage in the inheritance chain. + /// See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps + uint256[45] private __gap; +} diff --git a/src/contracts/core/ReleaseManagerStorage.sol b/src/contracts/core/storage/ReleaseManagerStorage.sol similarity index 94% rename from src/contracts/core/ReleaseManagerStorage.sol rename to src/contracts/core/storage/ReleaseManagerStorage.sol index 149355b5ab..6decfa9b95 100644 --- a/src/contracts/core/ReleaseManagerStorage.sol +++ b/src/contracts/core/storage/ReleaseManagerStorage.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../interfaces/IReleaseManager.sol"; +import "../../interfaces/IReleaseManager.sol"; abstract contract ReleaseManagerStorage is IReleaseManager { // Mutables diff --git a/src/contracts/core/RewardsCoordinatorStorage.sol b/src/contracts/core/storage/RewardsCoordinatorStorage.sol similarity index 99% rename from src/contracts/core/RewardsCoordinatorStorage.sol rename to src/contracts/core/storage/RewardsCoordinatorStorage.sol index a743959809..5cf50fd318 100644 --- a/src/contracts/core/RewardsCoordinatorStorage.sol +++ b/src/contracts/core/storage/RewardsCoordinatorStorage.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "../interfaces/IRewardsCoordinator.sol"; +import "../../interfaces/IRewardsCoordinator.sol"; /** * @title Storage variables for the `RewardsCoordinator` contract. diff --git a/src/contracts/core/StrategyManagerStorage.sol b/src/contracts/core/storage/StrategyManagerStorage.sol similarity index 94% rename from src/contracts/core/StrategyManagerStorage.sol rename to src/contracts/core/storage/StrategyManagerStorage.sol index bbedfc2bce..f63c4c78c3 100644 --- a/src/contracts/core/StrategyManagerStorage.sol +++ b/src/contracts/core/storage/StrategyManagerStorage.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/utils/structs/EnumerableMap.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; -import "../interfaces/IAllocationManager.sol"; -import "../interfaces/IAVSDirectory.sol"; -import "../interfaces/IDelegationManager.sol"; -import "../interfaces/IEigenPodManager.sol"; -import "../interfaces/IStrategy.sol"; -import "../interfaces/IStrategyManager.sol"; +import "../../interfaces/IAllocationManager.sol"; +import "../../interfaces/IAVSDirectory.sol"; +import "../../interfaces/IDelegationManager.sol"; +import "../../interfaces/IEigenPodManager.sol"; +import "../../interfaces/IStrategy.sol"; +import "../../interfaces/IStrategyManager.sol"; /** * @title Storage variables for the `StrategyManager` contract. diff --git a/src/contracts/interfaces/IAllocationManager.sol b/src/contracts/interfaces/IAllocationManager.sol index 7bbf82e2d5..e69a652cbf 100644 --- a/src/contracts/interfaces/IAllocationManager.sol +++ b/src/contracts/interfaces/IAllocationManager.sol @@ -2,10 +2,11 @@ pragma solidity >=0.5.0; import {OperatorSet} from "../libraries/OperatorSetLib.sol"; +import "./IDelegationManager.sol"; import "./IPauserRegistry.sol"; +import "./IPausable.sol"; import "./IStrategy.sol"; import "./IAVSRegistrar.sol"; -import "./ISemVerMixin.sol"; interface IAllocationManagerErrors { /// Input Validation @@ -21,6 +22,8 @@ interface IAllocationManagerErrors { error InvalidStrategy(); /// @dev Thrown when an invalid redistribution recipient is provided. error InvalidRedistributionRecipient(); + /// @dev Thrown when an operatorSet is already migrated + error OperatorSetAlreadyMigrated(); /// Caller @@ -61,6 +64,11 @@ interface IAllocationManagerErrors { error ModificationAlreadyPending(); /// @dev Thrown when an allocation is attempted that exceeds a given operators total allocatable magnitude. error InsufficientMagnitude(); + + /// SlasherStatus + + /// @dev Thrown when an operator set does not have a slasher set + error SlasherNotSet(); } interface IAllocationManagerTypes { @@ -76,6 +84,19 @@ interface IAllocationManagerTypes { uint32 effectBlock; } + /** + * @notice Parameters for addresses that can slash operatorSets + * @param slasher the address that can slash the operator set + * @param pendingSlasher the address that will become the slasher for the operator set after a delay + * @param effectBlock the block at which the pending slasher will take effect + * @dev It is not possible for the slasher to be the 0 address, which is used to denote if the slasher is not set + */ + struct SlasherParams { + address slasher; + address pendingSlasher; + uint32 effectBlock; + } + /** * @notice Struct containing allocation delay metadata for a given operator. * @param delay Current allocation delay @@ -169,17 +190,36 @@ interface IAllocationManagerTypes { * @notice Parameters used by an AVS to create new operator sets * @param operatorSetId the id of the operator set to create * @param strategies the strategies to add as slashable to the operator set + * @dev This struct and its associated method will be deprecated in Early Q2 2026 */ struct CreateSetParams { uint32 operatorSetId; IStrategy[] strategies; } + /** + * @notice Parameters used by an AVS to create new operator sets + * @param operatorSetId the id of the operator set to create + * @param strategies the strategies to add as slashable to the operator set + * @param slasher the address that will be the slasher for the operator set + */ + + struct CreateSetParamsV2 { + uint32 operatorSetId; + IStrategy[] strategies; + address slasher; + } } interface IAllocationManagerEvents is IAllocationManagerTypes { /// @notice Emitted when operator updates their allocation delay. event AllocationDelaySet(address operator, uint32 delay, uint32 effectBlock); + /// @notice Emitted when an operator set's slasher is updated. + event SlasherUpdated(OperatorSet operatorSet, address slasher, uint32 effectBlock); + + /// @notice Emitted when an operator set's slasher is migrated. + event SlasherMigrated(OperatorSet operatorSet, address slasher); + /// @notice Emitted when an operator's magnitude is updated for a given operatorSet and strategy event AllocationUpdated( address operator, OperatorSet operatorSet, IStrategy strategy, uint64 magnitude, uint32 effectBlock @@ -223,7 +263,32 @@ interface IAllocationManagerEvents is IAllocationManagerTypes { event StrategyRemovedFromOperatorSet(OperatorSet operatorSet, IStrategy strategy); } -interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEvents, ISemVerMixin { +interface IAllocationManagerStorage is IAllocationManagerEvents { + /** + * @notice The DelegationManager contract for EigenLayer + */ + function delegation() external view returns (IDelegationManager); + + /** + * @notice The Eigen strategy contract + * @dev Cannot be added to redistributing operator sets + */ + function eigenStrategy() external view returns (IStrategy); + + /** + * @notice Returns the number of blocks between an operator deallocating magnitude and the magnitude becoming + * unslashable and then being able to be reallocated to another operator set. Note that unlike the allocation delay + * which is configurable by the operator, the DEALLOCATION_DELAY is globally fixed and cannot be changed. + */ + function DEALLOCATION_DELAY() external view returns (uint32 delay); + + /** + * @notice Delay before alloaction delay modifications take effect. + */ + function ALLOCATION_CONFIGURATION_DELAY() external view returns (uint32); +} + +interface IAllocationManagerActions is IAllocationManagerErrors, IAllocationManagerEvents, IAllocationManagerStorage { /** * @dev Initializes the initial owner and paused status. */ @@ -315,6 +380,9 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven * allocating magnitude to an operator set, and the magnitude becoming slashable. * @param operator The operator to set the delay on behalf of. * @param delay the allocation delay in blocks + * @dev When the delay is set for a newly-registered operator (via the `DelegationManager.registerAsOperator` method), + * the delay will take effect immediately, allowing for operators to allocate slashable stake immediately. + * Else, the delay will take effect after `ALLOCATION_CONFIGURATION_DELAY` blocks. */ function setAllocationDelay(address operator, uint32 delay) external; @@ -337,9 +405,25 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven /** * @notice Allows an AVS to create new operator sets, defining strategies that the operator set uses + * @dev Upon creation, the address that can slash the operatorSet is the `avs` address. If you would like to use a different address, + * use the `createOperatorSets` method which takes in `CreateSetParamsV2` instead. + * @dev THIS FUNCTION WILL BE DEPRECATED IN EARLY Q2 2026 IN FAVOR OF `createOperatorSets`, WHICH TAKES IN `CreateSetParamsV2` + * @dev Reverts for: + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InvalidOperatorSet: The operatorSet already exists + * - InputAddressZero: The slasher is the zero address */ function createOperatorSets(address avs, CreateSetParams[] calldata params) external; + /** + * @notice Allows an AVS to create new operator sets, defining strategies that the operator set uses + * @dev Reverts for: + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InvalidOperatorSet: The operatorSet already exists + * - InputAddressZero: The slasher is the zero address + */ + function createOperatorSets(address avs, CreateSetParamsV2[] calldata params) external; + /** * @notice Allows an AVS to create new Redistribution operator sets. * @param avs The AVS creating the new operator sets. @@ -347,6 +431,17 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven * @param redistributionRecipients An array of addresses that will receive redistributed funds when operators are slashed. * @dev Same logic as `createOperatorSets`, except `redistributionRecipients` corresponding to each operator set are stored. * Additionally, emits `RedistributionOperatorSetCreated` event instead of `OperatorSetCreated` for each created operator set. + * @dev The address that can slash the operatorSet is the `avs` address. If you would like to use a different address, + * use the `createOperatorSets` method which takes in `CreateSetParamsV2` instead. + * @dev THIS FUNCTION WILL BE DEPRECATED IN EARLY Q2 2026 IN FAVOR OF `createRedistributingOperatorSets` WHICH TAKES IN `CreateSetParamsV2` + * @dev Reverts for: + * - InputArrayLengthMismatch: The length of the params array does not match the length of the redistributionRecipients array + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InputAddressZero: The redistribution recipient is the zero address + * - InvalidRedistributionRecipient: The redistribution recipient is the zero address or the default burn address + * - InvalidOperatorSet: The operatorSet already exists + * - InvalidStrategy: The strategy is the BEACONCHAIN_ETH_STRAT or the EIGEN strategy + * - InputAddressZero: The slasher is the zero address */ function createRedistributingOperatorSets( address avs, @@ -354,6 +449,28 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven address[] calldata redistributionRecipients ) external; + /** + * @notice Allows an AVS to create new Redistribution operator sets. + * @param avs The AVS creating the new operator sets. + * @param params An array of operator set creation parameters. + * @param redistributionRecipients An array of addresses that will receive redistributed funds when operators are slashed. + * @dev Same logic as `createOperatorSets`, except `redistributionRecipients` corresponding to each operator set are stored. + * Additionally, emits `RedistributionOperatorSetCreated` event instead of `OperatorSetCreated` for each created operator set. + * @dev Reverts for: + * - InputArrayLengthMismatch: The length of the params array does not match the length of the redistributionRecipients array + * - NonexistentAVSMetadata: The AVS metadata is not registered + * - InputAddressZero: The redistribution recipient is the zero address + * - InvalidRedistributionRecipient: The redistribution recipient is the zero address or the default burn address + * - InvalidOperatorSet: The operatorSet already exists + * - InvalidStrategy: The strategy is the BEACONCHAIN_ETH_STRAT or the EIGEN strategy + * - InputAddressZero: The slasher is the zero address + */ + function createRedistributingOperatorSets( + address avs, + CreateSetParamsV2[] calldata params, + address[] calldata redistributionRecipients + ) external; + /** * @notice Allows an AVS to add strategies to an operator set * @dev Strategies MUST NOT already exist in the operator set @@ -377,6 +494,40 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven IStrategy[] calldata strategies ) external; + /** + * @notice Allows an AVS to update the slasher for an operator set + * @param operatorSet the operator set to update the slasher for + * @param slasher the new slasher + * @dev The new slasher will take effect in DEALLOCATION_DELAY blocks + * @dev The slasher can only be updated if it has already been set. The slasher is set either on operatorSet creation or, + * for operatorSets created prior to v1.9.0, via `migrateSlashers` + * @dev Reverts for: + * - InvalidCaller: The caller cannot update the slasher for the operator set (set via the `PermissionController`) + * - InvalidOperatorSet: The operator set does not exist + * - SlasherNotSet: The slasher has not been set yet + * - InputAddressZero: The slasher is the zero address + */ + function updateSlasher(OperatorSet memory operatorSet, address slasher) external; + + /** + * @notice Allows any address to migrate the slasher from the permission controller to the ALM + * @param operatorSets the list of operator sets to migrate the slasher for + * @dev This function is used to migrate the slasher from the permission controller to the ALM for operatorSets created prior to `v1.9.0` + * @dev Migrates based on the following rules: + * - If there is no slasher set or the slasher in the `PermissionController`is the 0 address, the AVS address will be set as the slasher + * - If there are multiple slashers set in the `PermissionController`, the first address will be set as the slasher + * @dev A migration can only be completed once for a given operatorSet + * @dev This function will be deprecated in Early Q2 2026. EigenLabs will migrate the slasher for all operatorSets created prior to `v1.9.0` + * @dev This function does not revert to allow for simpler offchain calling. It will no-op if: + * - The operator set does not exist + * - The slasher has already been set, either via migration or creation of the operatorSet + */ + function migrateSlashers( + OperatorSet[] memory operatorSets + ) external; +} + +interface IAllocationManagerView is IAllocationManagerErrors, IAllocationManagerEvents, IAllocationManagerStorage { /** * * VIEW FUNCTIONS @@ -532,13 +683,6 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven address operator ) external view returns (bool isSet, uint32 delay); - /** - * @notice Returns the number of blocks between an operator deallocating magnitude and the magnitude becoming - * unslashable and then being able to be reallocated to another operator set. Note that unlike the allocation delay - * which is configurable by the operator, the DEALLOCATION_DELAY is globally fixed and cannot be changed. - */ - function DEALLOCATION_DELAY() external view returns (uint32 delay); - /** * @notice Returns a list of all operator sets the operator is registered for * @param operator The operator address to query. @@ -639,6 +783,26 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven */ function isOperatorSlashable(address operator, OperatorSet memory operatorSet) external view returns (bool); + /** + * @notice Returns the address that can slash a given operator set. + * @param operatorSet The operator set to query. + * @return The address that can slash the operator set. + * @dev If there is a pending slasher that can be applied after the `effectBlock`, the pending slasher will be returned. + */ + function getSlasher( + OperatorSet memory operatorSet + ) external view returns (address); + + /** + * @notice Returns pending slasher for a given operator set. + * @param operatorSet The operator set to query. + * @return pendingSlasher The pending slasher for the operator set. This value is 0 if there is no pending slasher. + * @return effectBlock The block at which the pending slasher will take effect. This value is 0 if there is no pending slasher. + */ + function getPendingSlasher( + OperatorSet memory operatorSet + ) external view returns (address pendingSlasher, uint32 effectBlock); + /** * @notice Returns the address where slashed funds will be sent for a given operator set. * @param operatorSet The Operator Set to query. @@ -677,3 +841,5 @@ interface IAllocationManager is IAllocationManagerErrors, IAllocationManagerEven address operator ) external view returns (bool); } + +interface IAllocationManager is IAllocationManagerActions, IAllocationManagerView, IPausable {} diff --git a/src/contracts/interfaces/IDelegationManager.sol b/src/contracts/interfaces/IDelegationManager.sol index fcbc9a4afd..2a7de0a02c 100644 --- a/src/contracts/interfaces/IDelegationManager.sol +++ b/src/contracts/interfaces/IDelegationManager.sol @@ -447,11 +447,12 @@ interface IDelegationManager is ISignatureUtilsMixin, IDelegationManagerErrors, /** * @notice Returns amount of withdrawable shares from an operator for a strategy that is still in the queue - * and therefore slashable. Note that the *actual* slashable amount could be less than this value as this doesn't account - * for amounts that have already been slashed. This assumes that none of the shares have been slashed. + * and therefore slashable. * @param operator the operator to get shares for * @param strategy the strategy to get shares for * @return the amount of shares that are slashable in the withdrawal queue for an operator and a strategy + * @dev If multiple slashes occur to shares in the queue, the function properly accounts for the fewer + * number of shares that are available to be slashed. */ function getSlashableSharesInQueue(address operator, IStrategy strategy) external view returns (uint256); diff --git a/src/contracts/interfaces/IEigenPod.sol b/src/contracts/interfaces/IEigenPod.sol index c36f1fce98..70119b082f 100644 --- a/src/contracts/interfaces/IEigenPod.sol +++ b/src/contracts/interfaces/IEigenPod.sol @@ -4,7 +4,6 @@ pragma solidity >=0.5.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../libraries/BeaconChainProofs.sol"; -import "./ISemVerMixin.sol"; import "./IEigenPodManager.sol"; interface IEigenPodErrors { @@ -190,7 +189,7 @@ interface IEigenPodEvents is IEigenPodTypes { * @dev Note that all beacon chain balances are stored as gwei within the beacon chain datastructures. We choose * to account balances in terms of gwei in the EigenPod contract and convert to wei when making calls to other contracts */ -interface IEigenPod is IEigenPodErrors, IEigenPodEvents, ISemVerMixin { +interface IEigenPod is IEigenPodErrors, IEigenPodEvents { /// @notice Used to initialize the pointers to contracts crucial to the pod's functionality, in beacon proxy construction from EigenPodManager function initialize( address owner diff --git a/src/contracts/interfaces/IEigenPodManager.sol b/src/contracts/interfaces/IEigenPodManager.sol index b7814e9888..fe9d1ac0b2 100644 --- a/src/contracts/interfaces/IEigenPodManager.sol +++ b/src/contracts/interfaces/IEigenPodManager.sol @@ -8,7 +8,6 @@ import "./IEigenPod.sol"; import "./IShareManager.sol"; import "./IPausable.sol"; import "./IStrategy.sol"; -import "./ISemVerMixin.sol"; interface IEigenPodManagerErrors { /// @dev Thrown when caller is not a EigenPod. @@ -94,8 +93,7 @@ interface IEigenPodManager is IEigenPodManagerEvents, IEigenPodManagerTypes, IShareManager, - IPausable, - ISemVerMixin + IPausable { /** * @notice Creates an EigenPod for the sender. diff --git a/src/contracts/interfaces/IKeyRegistrar.sol b/src/contracts/interfaces/IKeyRegistrar.sol index 79f570cf27..a5889b292b 100644 --- a/src/contracts/interfaces/IKeyRegistrar.sol +++ b/src/contracts/interfaces/IKeyRegistrar.sol @@ -3,7 +3,6 @@ pragma solidity >=0.5.0; import {OperatorSet} from "../libraries/OperatorSetLib.sol"; import {BN254} from "../libraries/BN254.sol"; -import "./ISemVerMixin.sol"; interface IKeyRegistrarErrors { /// @notice Error thrown when a key is already registered @@ -92,47 +91,46 @@ interface IKeyRegistrarEvents is IKeyRegistrarTypes { /// @dev This contract requires that keys are unique across all operatorSets, globally /// @dev For the multichain protocol, the key type of the operatorSet must be set in the `KeyRegistrar`, but the /// AVS is not required to use the KeyRegistrar for operator key management and can implement its own registry -interface IKeyRegistrar is IKeyRegistrarErrors, IKeyRegistrarEvents, ISemVerMixin { - /** - * @notice Configures an operator set with curve type - * @param operatorSet The operator set to configure - * @param curveType Type of curve (ECDSA, BN254) - * @dev Only authorized callers for the AVS can configure operator sets - * @dev Reverts for: - * - InvalidPermissions: Caller is not authorized for the AVS (via the PermissionController) - * - InvalidCurveType: The curve type is not ECDSA or BN254 - * - ConfigurationAlreadySet: The operator set is already configured - * @dev Emits the following events: - * - OperatorSetConfigured: When the operator set is successfully configured with a curve type - */ - function configureOperatorSet(OperatorSet memory operatorSet, CurveType curveType) external; +interface IKeyRegistrar is IKeyRegistrarErrors, IKeyRegistrarEvents { + /// @notice Configures an operator set with curve type + /// @param operatorSet The operator set to configure + /// @param curveType Type of curve (ECDSA, BN254) + /// @dev Only authorized callers for the AVS can configure operator sets + /// @dev Reverts for: + /// - InvalidPermissions: Caller is not authorized for the AVS (via the PermissionController) + /// - InvalidCurveType: The curve type is not ECDSA or BN254 + /// - ConfigurationAlreadySet: The operator set is already configured + /// @dev Emits the following events: + /// - OperatorSetConfigured: When the operator set is successfully configured with a curve type + function configureOperatorSet( + OperatorSet memory operatorSet, + CurveType curveType + ) external; - /** - * @notice Registers a cryptographic key for an operator with a specific operator set - * @param operator Address of the operator to register key for - * @param operatorSet The operator set to register the key for - * @param pubkey Public key bytes. For ECDSA, this is the address of the key. For BN254, this is the G1 and G2 key combined (see `encodeBN254KeyData`) - * @param signature Signature proving ownership. For ECDSA this is a signature of the `getECDSAKeyRegistrationMessageHash`. For BN254 this is a signature of the `getBN254KeyRegistrationMessageHash`. - * @dev Can be called by operator directly or by addresses they've authorized via the `PermissionController` - * @dev There exist no restriction on the state of the operator with respect to the operatorSet. That is, an operator - * does not have to be registered for the operator in the `AllocationManager` to register a key for it - * @dev For ECDSA, we allow a smart contract to be the pubkey (via ERC1271 signatures), but note that the multichain protocol DOES NOT support smart contract signatures - * @dev Reverts for: - * - InvalidPermissions: Caller is not the operator or authorized via the PermissionController - * - OperatorSetNotConfigured: The operator set is not configured - * - OperatorAlreadyRegistered: The operator is already registered for the operatorSet in the KeyRegistrar - * - InvalidKeyFormat: For ECDSA: The key is not exactly 20 bytes - * - ZeroAddress: For ECDSA: The key is the zero address - * - KeyAlreadyRegistered: For ECDSA: The key is already registered globally by hash - * - InvalidSignature: For ECDSA: The signature is not valid - * - InvalidKeyFormat: For BN254: The key data is not exactly 192 bytes - * - InvalidSignature: For BN254: The signature is not exactly 64 bytes - * - ZeroPubkey: For BN254: The G1 point is the zero point - * - InvalidSignature: For BN254: The signature is not valid - * - KeyAlreadyRegistered: For BN254: The key is already registered globally by hash - * @dev Emits the following events: - * - KeyRegistered: When the key is successfully registered for the operator and operatorSet - */ + /// @notice Registers a cryptographic key for an operator with a specific operator set + /// @param operator Address of the operator to register key for + /// @param operatorSet The operator set to register the key for + /// @param pubkey Public key bytes. For ECDSA, this is the address of the key. For BN254, this is the G1 and G2 key combined (see `encodeBN254KeyData`) + /// @param signature Signature proving ownership. For ECDSA this is a signature of the `getECDSAKeyRegistrationMessageHash`. For BN254 this is a signature of the `getBN254KeyRegistrationMessageHash`. + /// @dev Can be called by operator directly or by addresses they've authorized via the `PermissionController` + /// @dev There exist no restriction on the state of the operator with respect to the operatorSet. That is, an operator + /// does not have to be registered for the operator in the `AllocationManager` to register a key for it + /// @dev For ECDSA, we allow a smart contract to be the pubkey (via ERC1271 signatures), but note that the multichain protocol DOES NOT support smart contract signatures + /// @dev Reverts for: + /// - InvalidPermissions: Caller is not the operator or authorized via the PermissionController + /// - OperatorSetNotConfigured: The operator set is not configured + /// - OperatorAlreadyRegistered: The operator is already registered for the operatorSet in the KeyRegistrar + /// - InvalidKeyFormat: For ECDSA: The key is not exactly 20 bytes + /// - ZeroAddress: For ECDSA: The key is the zero address + /// - KeyAlreadyRegistered: For ECDSA: The key is already registered globally by hash + /// - InvalidSignature: For ECDSA: The signature is not valid + /// - InvalidKeyFormat: For BN254: The key data is not exactly 192 bytes + /// - InvalidSignature: For BN254: The signature is not exactly 64 bytes + /// - ZeroPubkey: For BN254: The G1 point is the zero point + /// - InvalidSignature: For BN254: The signature is not valid + /// - KeyAlreadyRegistered: For BN254: The key is already registered globally by hash + /// @dev Emits the following events: + /// - KeyRegistered: When the key is successfully registered for the operator and operatorSet function registerKey( address operator, OperatorSet memory operatorSet, @@ -156,14 +154,15 @@ interface IKeyRegistrar is IKeyRegistrarErrors, IKeyRegistrarEvents, ISemVerMixi */ function deregisterKey(address operator, OperatorSet memory operatorSet) external; - /** - * @notice Checks if a key is registered for an operator with a specific operator set - * @param operatorSet The operator set to check - * @param operator Address of the operator - * @return True if the key is registered, false otherwise - * @dev If the operatorSet is not configured, this function will return false - */ - function isRegistered(OperatorSet memory operatorSet, address operator) external view returns (bool); + /// @notice Checks if a key is registered for an operator with a specific operator set + /// @param operatorSet The operator set to check + /// @param operator Address of the operator + /// @return True if the key is registered, false otherwise + /// @dev If the operatorSet is not configured, this function will return false + function isRegistered( + OperatorSet memory operatorSet, + address operator + ) external view returns (bool); /** * @notice Gets the curve type for an operator set diff --git a/src/contracts/interfaces/IPermissionController.sol b/src/contracts/interfaces/IPermissionController.sol index b8e2153736..6deca8206c 100644 --- a/src/contracts/interfaces/IPermissionController.sol +++ b/src/contracts/interfaces/IPermissionController.sol @@ -1,8 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity ^0.8.27; -import "./ISemVerMixin.sol"; - interface IPermissionControllerErrors { /// @notice Thrown when a non-admin caller attempts to perform an admin-only action. error NotAdmin(); @@ -42,7 +40,7 @@ interface IPermissionControllerEvents { event AdminRemoved(address indexed account, address admin); } -interface IPermissionController is IPermissionControllerErrors, IPermissionControllerEvents, ISemVerMixin { +interface IPermissionController is IPermissionControllerErrors, IPermissionControllerEvents { /** * @notice Sets a pending admin for an account. * @param account The account to set the pending admin for. @@ -145,7 +143,7 @@ interface IPermissionController is IPermissionControllerErrors, IPermissionContr * This is only possible if a function's selector changes (e.g. if a function's parameters are modified). * @return Returns true if the caller has permission, false otherwise. */ - function canCall(address account, address caller, address target, bytes4 selector) external returns (bool); + function canCall(address account, address caller, address target, bytes4 selector) external view returns (bool); /** * @notice Retrieves all permissions granted to an appointee for a given account. @@ -156,7 +154,7 @@ interface IPermissionController is IPermissionControllerErrors, IPermissionContr function getAppointeePermissions( address account, address appointee - ) external returns (address[] memory, bytes4[] memory); + ) external view returns (address[] memory, bytes4[] memory); /** * @notice Retrieves all appointees that can call a specific function for an account. @@ -166,5 +164,5 @@ interface IPermissionController is IPermissionControllerErrors, IPermissionContr * @dev Does not include admins in the returned list, even though they have calling permission. * @return An array of appointee addresses. */ - function getAppointees(address account, address target, bytes4 selector) external returns (address[] memory); + function getAppointees(address account, address target, bytes4 selector) external view returns (address[] memory); } diff --git a/src/contracts/interfaces/IProtocolRegistry.sol b/src/contracts/interfaces/IProtocolRegistry.sol new file mode 100644 index 0000000000..ac021706e0 --- /dev/null +++ b/src/contracts/interfaces/IProtocolRegistry.sol @@ -0,0 +1,135 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +interface IProtocolRegistryErrors {} + +interface IProtocolRegistryTypes { + /** + * @notice Configuration for a protocol deployment. + * @param pausable Whether this deployment can be paused. + * @param deprecated Whether this deployment is deprecated. + */ + struct DeploymentConfig { + bool pausable; + bool deprecated; + } +} + +interface IProtocolRegistryEvents is IProtocolRegistryTypes { + /** + * @notice Emitted when a deployment is shipped. + * @param addr The address of the deployment. + * @param config The configuration for the deployment. + */ + event DeploymentShipped(address indexed addr, DeploymentConfig config); + + /** + * @notice Emitted when a deployment is configured. + * @param addr The address of the deployment. + * @param config The configuration for the deployment. + */ + event DeploymentConfigured(address indexed addr, DeploymentConfig config); + + /** + * @notice Emitted when the semantic version is updated. + * @param previousSemanticVersion The previous semantic version. + * @param semanticVersion The new semantic version. + */ + event SemanticVersionUpdated(string previousSemanticVersion, string semanticVersion); +} + +interface IProtocolRegistry is IProtocolRegistryErrors, IProtocolRegistryEvents { + /** + * @notice Initializes the ProtocolRegistry with the initial admin. + * @param initialAdmin The address to set as the initial admin. + * @param pauserMultisig The address to set as the pauser multisig. + */ + function initialize(address initialAdmin, address pauserMultisig) external; + + /** + * @notice Ships a list of deployments. + * @dev Only callable by the admin. + * @param addresses The addresses of the deployments to ship. + * @param configs The configurations of the deployments to ship. + * @param contractNames The names of the contracts to ship. + * @param semanticVersion The semantic version to ship. + * @dev Contract names must be in ALL CAPS and contain NO SPACES (e.g., "ALLOCATIONMANAGER"). + */ + function ship( + address[] calldata addresses, + DeploymentConfig[] calldata configs, + string[] calldata contractNames, + string calldata semanticVersion + ) external; + + /** + * @notice Configures a deployment. + * @dev Only callable by the admin. + * @param addr The address of the deployment to configure. + * @param config The configuration to set. + */ + function configure(address addr, DeploymentConfig calldata config) external; + + /** + * @notice Pauses all deployments that support pausing. + * @dev Loops over all deployments and attempts to invoke `pauseAll()` on each contract that is marked as pausable. + * Silently ignores errors during calls for rapid pausing in emergencies. Pauser role only. + */ + function pauseAll() external; + + /** + * @notice Returns the full semantic version string of the protocol (e.g. "1.2.3"). + * @dev Follows Semantic Versioning 2.0.0 (see https://semver.org/). + * @return The SemVer-formatted version string of the protocol. + */ + function version() external view returns (string memory); + + /** + * @notice Returns the major version component of the protocol's semantic version. + * @dev Extracts and returns only the major version number as a string (e.g. "1" for version "1.2.3"). + * @return The major version number as a string. + */ + function majorVersion() external view returns (string memory); + + /** + * @notice Returns a deployment by name. + * @param name The name of the deployment to get. + * @return address The address of the deployment. + */ + function getAddress( + string calldata name + ) external view returns (address); + + /** + * @notice Returns a deployment by name. + * @param name The name of the deployment to get. + * @return addr The address. + * @return config The configuration. + */ + function getDeployment( + string calldata name + ) external view returns (address addr, DeploymentConfig memory config); + + /** + * @notice Returns all deployments. + * @return names The names of the deployments. + * @return addresses The addresses. + * @return configs The configurations. + */ + function getAllDeployments() + external + view + returns (string[] memory names, address[] memory addresses, DeploymentConfig[] memory configs); + + /** + * @notice Returns the total number of deployments. + * @return The total number of deployments. + */ + function totalDeployments() external view returns (uint256); + + /** + * @notice Returns the pauser role for the protocol. + * @return The pauser role for the protocol. + */ + function PAUSER_ROLE() external view returns (bytes32); +} diff --git a/src/contracts/interfaces/IProxyAdmin.sol b/src/contracts/interfaces/IProxyAdmin.sol new file mode 100644 index 0000000000..2eadbc6cd0 --- /dev/null +++ b/src/contracts/interfaces/IProxyAdmin.sol @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: MIT +// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol) +pragma solidity ^0.8.0; + +/** + * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an + * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}. + */ +interface IProxyAdmin { + /** + * @dev Returns the current implementation of `proxy`. + * + * Requirements: + * + * - This contract must be the admin of `proxy`. + */ + function getProxyImplementation( + address proxy + ) external view returns (address); + + /** + * @dev Returns the current admin of `proxy`. + * + * Requirements: + * + * - This contract must be the admin of `proxy`. + */ + function getProxyAdmin( + address proxy + ) external view returns (address); + + /** + * @dev Changes the admin of `proxy` to `newAdmin`. + * + * Requirements: + * + * - This contract must be the current admin of `proxy`. + */ + function changeProxyAdmin(address proxy, address newAdmin) external; + + /** + * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. + * + * Requirements: + * + * - This contract must be the admin of `proxy`. + */ + function upgrade(address proxy, address implementation) external; + + /** + * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See + * {TransparentUpgradeableProxy-upgradeToAndCall}. + * + * Requirements: + * + * - This contract must be the admin of `proxy`. + */ + function upgradeAndCall(address proxy, address implementation, bytes memory data) external payable; +} diff --git a/src/contracts/interfaces/IRewardsCoordinator.sol b/src/contracts/interfaces/IRewardsCoordinator.sol index 1baf624e41..bfd30cb803 100644 --- a/src/contracts/interfaces/IRewardsCoordinator.sol +++ b/src/contracts/interfaces/IRewardsCoordinator.sol @@ -10,7 +10,6 @@ import "./IStrategyManager.sol"; import "./IPauserRegistry.sol"; import "./IPermissionController.sol"; import "./IStrategy.sol"; -import "./ISemVerMixin.sol"; interface IRewardsCoordinatorErrors { /// @dev Thrown when msg.sender is not allowed to call a function @@ -272,7 +271,6 @@ interface IRewardsCoordinatorTypes { uint32 MAX_RETROACTIVE_LENGTH; uint32 MAX_FUTURE_LENGTH; uint32 GENESIS_REWARDS_TIMESTAMP; - string version; } } @@ -427,7 +425,7 @@ interface IRewardsCoordinatorEvents is IRewardsCoordinatorTypes { * Calculations are performed based on the completed RewardsSubmission, with the results posted in * a Merkle root against which Stakers & Operators can make claims. */ -interface IRewardsCoordinator is IRewardsCoordinatorErrors, IRewardsCoordinatorEvents, ISemVerMixin { +interface IRewardsCoordinator is IRewardsCoordinatorErrors, IRewardsCoordinatorEvents { /** * @dev Initializes the addresses of the initial owner, pauser registry, rewardsUpdater and * configures the initial paused status, activationDelay, and defaultOperatorSplitBips. diff --git a/src/contracts/interfaces/ISignatureUtilsMixin.sol b/src/contracts/interfaces/ISignatureUtilsMixin.sol index 7b9c8c372f..a34e17e475 100644 --- a/src/contracts/interfaces/ISignatureUtilsMixin.sol +++ b/src/contracts/interfaces/ISignatureUtilsMixin.sol @@ -1,8 +1,6 @@ // SPDX-License-Identifier: BUSL-1.1 pragma solidity >=0.5.0; -import "./ISemVerMixin.sol"; - interface ISignatureUtilsMixinErrors { /// @notice Thrown when a signature is invalid. error InvalidSignature(); @@ -37,7 +35,7 @@ interface ISignatureUtilsMixinTypes { * @author Layr Labs, Inc. * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service */ -interface ISignatureUtilsMixin is ISignatureUtilsMixinErrors, ISignatureUtilsMixinTypes, ISemVerMixin { +interface ISignatureUtilsMixin is ISignatureUtilsMixinErrors, ISignatureUtilsMixinTypes { /// @notice Computes the EIP-712 domain separator used for signature validation. /// @dev The domain separator is computed according to EIP-712 specification, using: /// - The hardcoded name "EigenLayer" diff --git a/src/contracts/interfaces/IStrategy.sol b/src/contracts/interfaces/IStrategy.sol index bb60597940..0cea069598 100644 --- a/src/contracts/interfaces/IStrategy.sol +++ b/src/contracts/interfaces/IStrategy.sol @@ -3,7 +3,6 @@ pragma solidity >=0.5.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../libraries/SlashingLib.sol"; -import "./ISemVerMixin.sol"; interface IStrategyErrors { /// @dev Thrown when called by an account that is not strategy manager. @@ -48,7 +47,7 @@ interface IStrategyEvents { * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @notice Custom `Strategy` implementations may expand extensively on this interface. */ -interface IStrategy is IStrategyErrors, IStrategyEvents, ISemVerMixin { +interface IStrategy is IStrategyErrors, IStrategyEvents { /** * @notice Used to deposit tokens into this Strategy * @param token is the ERC20 token being deposited diff --git a/src/contracts/interfaces/IStrategyFactory.sol b/src/contracts/interfaces/IStrategyFactory.sol index c019695b4a..137659cc34 100644 --- a/src/contracts/interfaces/IStrategyFactory.sol +++ b/src/contracts/interfaces/IStrategyFactory.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/IBeacon.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IStrategy.sol"; -import "./ISemVerMixin.sol"; /** * @title Interface for the `StrategyFactory` contract. @@ -12,7 +11,7 @@ import "./ISemVerMixin.sol"; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @dev This may not be compatible with non-standard ERC20 tokens. Caution is warranted. */ -interface IStrategyFactory is ISemVerMixin { +interface IStrategyFactory { /// @dev Thrown when attempting to deploy a strategy for a blacklisted token. error BlacklistedToken(); /// @dev Thrown when attempting to deploy a strategy that already exists. diff --git a/src/contracts/interfaces/IStrategyManager.sol b/src/contracts/interfaces/IStrategyManager.sol index 15f0c098f0..05aa079899 100644 --- a/src/contracts/interfaces/IStrategyManager.sol +++ b/src/contracts/interfaces/IStrategyManager.sol @@ -5,7 +5,6 @@ import "./IStrategy.sol"; import "./IShareManager.sol"; import "./IDelegationManager.sol"; import "./IEigenPodManager.sol"; -import "./ISemVerMixin.sol"; interface IStrategyManagerErrors { /// @dev Thrown when total strategies deployed exceeds max. @@ -67,7 +66,7 @@ interface IStrategyManagerEvents { * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @notice See the `StrategyManager` contract itself for implementation details. */ -interface IStrategyManager is IStrategyManagerErrors, IStrategyManagerEvents, IShareManager, ISemVerMixin { +interface IStrategyManager is IStrategyManagerErrors, IStrategyManagerEvents, IShareManager { /** * @notice Initializes the strategy manager contract. Sets the `pauserRegistry` (currently **not** modifiable after being set), * and transfers contract ownership to the specified `initialOwner`. diff --git a/src/contracts/libraries/SlashingLib.sol b/src/contracts/libraries/SlashingLib.sol index 24b512ed87..b2754e8742 100644 --- a/src/contracts/libraries/SlashingLib.sol +++ b/src/contracts/libraries/SlashingLib.sol @@ -15,9 +15,9 @@ uint64 constant WAD = 1e18; * There are 2 types of shares: * 1. deposit shares * - These can be converted to an amount of tokens given a strategy - * - by calling `sharesToUnderlying` on the strategy address (they're already tokens + * - by calling `sharesToUnderlying` on the strategy address (they're already tokens * in the case of EigenPods) - * - These live in the storage of the EigenPodManager and individual StrategyManager strategies + * - These live in the storage of the EigenPodManager and individual StrategyManager strategies * 2. withdrawable shares * - For a staker, this is the amount of shares that they can withdraw * - For an operator, the shares delegated to them are equal to the sum of their stakers' @@ -77,20 +77,6 @@ library SlashingLib { return scaledShares.mulWad(slashingFactor); } - /** - * @notice Scales shares according to the difference in an operator's magnitude before and - * after being slashed. This is used to calculate the number of slashable shares in the - * withdrawal queue. - * NOTE: max magnitude is guaranteed to only ever decrease. - */ - function scaleForBurning( - uint256 scaledShares, - uint64 prevMaxMagnitude, - uint64 newMaxMagnitude - ) internal pure returns (uint256) { - return scaledShares.mulWad(prevMaxMagnitude - newMaxMagnitude); - } - function update( DepositScalingFactor storage dsf, uint256 prevDepositShares, @@ -179,6 +165,12 @@ library SlashingLib { .divWad(slashingFactor); } + /// @notice Calculates the amount of shares that should be slashed given the previous and new magnitudes. + /// @param operatorShares The amount of shares to slash. + /// @param prevMaxMagnitude The previous magnitude of the operator. + /// @param newMaxMagnitude The new magnitude of the operator. + /// @return The amount of shares that should be slashed. + /// @dev This function will revert with a divide by zero error if the previous magnitude is 0. function calcSlashedAmount( uint256 operatorShares, uint256 prevMaxMagnitude, diff --git a/src/contracts/mixins/PermissionControllerMixin.sol b/src/contracts/mixins/PermissionControllerMixin.sol index 88fceff918..d198a064ff 100644 --- a/src/contracts/mixins/PermissionControllerMixin.sol +++ b/src/contracts/mixins/PermissionControllerMixin.sol @@ -16,23 +16,48 @@ abstract contract PermissionControllerMixin { permissionController = _permissionController; } - /// @notice Checks if the caller (msg.sender) can call on behalf of an account. + /** + * @notice Modifier that checks if the caller can call on behalf of an account, reverts if not permitted. + * @param account The account on whose behalf the function is being called. + * @dev Use this modifier when the entire function requires authorization. + * @dev This is the most common pattern - prefer this over `_checkCanCall` when possible. + */ modifier checkCanCall( address account ) { - require(_checkCanCall(account), InvalidPermissions()); + _checkCanCall(account); _; } /** - * @notice Checks if the caller is allowed to call a function on behalf of an account. - * @param account the account to check - * @dev `msg.sender` is the caller to check that can call the function on behalf of `account`. - * @dev Returns a bool, instead of reverting + * @notice Checks if the caller is permitted to call the current function on behalf of the given account. + * @param account The account on whose behalf the function is being called. + * @dev Reverts with `InvalidPermissions()` if the caller is not permitted. + * @dev Use this function instead of the modifier when: + * - You need to avoid "stack too deep" errors (e.g., when combining multiple modifiers) + * - You need more control over when the check occurs in your function logic */ function _checkCanCall( address account - ) internal returns (bool) { + ) internal view { + require(_canCall(account), InvalidPermissions()); + } + + /** + * @notice Checks if the caller is permitted to call the current function on behalf of the given account. + * @param account The account on whose behalf the function is being called. + * @return allowed True if the caller is permitted, false otherwise. + * @dev Unlike `_checkCanCall`, this function returns a boolean instead of reverting. + * @dev Use this function when you need conditional logic based on permissions, such as: + * - OR conditions: `require(_canCall(operator) || _canCall(avs), InvalidCaller());` + * - If-else branches: `if (_canCall(account)) { ... } else { ... }` + * - Multiple authorization paths in the same function + * @dev This function queries the permissionController to determine if msg.sender is authorized + * to call the current function (identified by msg.sig) on behalf of `account`. + */ + function _canCall( + address account + ) internal view returns (bool allowed) { return permissionController.canCall(account, msg.sender, address(this), msg.sig); } } diff --git a/src/contracts/mixins/SplitContractMixin.sol b/src/contracts/mixins/SplitContractMixin.sol new file mode 100644 index 0000000000..9fd94b5664 --- /dev/null +++ b/src/contracts/mixins/SplitContractMixin.sol @@ -0,0 +1,67 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +abstract contract SplitContractMixin { + /// @notice The address of the second half of the contract. + address public immutable viewImplementation; + + constructor( + address _viewImplementation + ) { + viewImplementation = _viewImplementation; + } + + /** + * @dev Delegates the current call to `implementation`. + * + * This function does not return to its internal call site, it will return directly to the external caller. + * + * Copied from OpenZeppelin Contracts v4.9.0 (proxy/Proxy.sol). + */ + function _delegate( + address implementation + ) internal virtual { + assembly { + // Copy msg.data. We take full control of memory in this inline assembly + // block because it will not return to Solidity code. We overwrite the + // Solidity scratch pad at memory position 0. + calldatacopy(0, 0, calldatasize()) + + // Call the implementation. + // out and outsize are 0 because we don't know the size yet. + let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0) + + // Copy the returned data. + returndatacopy(0, 0, returndatasize()) + + switch result + // delegatecall returns 0 on error. + case 0 { revert(0, returndatasize()) } + default { return(0, returndatasize()) } + } + } + + /** + * @dev Performs a delegate call to `implementation` in the context of a view function. + * + * This function typecasts the non-view `_delegate` function to a view function in order to + * allow its invocation from a view context. This is required because the EVM itself does not + * enforce view/pure mutability, and using inline assembly, it is possible to cast a function + * pointer to a view (read-only) signature. This pattern is sometimes used for readonly proxies, + * but it should be used cautiously since any state-modifying logic in the underlying delegate + * violates the spirit of a view call. + * + * @param implementation The address to which the call should be delegated. + */ + function _delegateView( + address implementation + ) internal view virtual { + function(address) fn = _delegate; + function(address) view fnView; + /// @solidity memory-safe-assembly + assembly { + fnView := fn + } + fnView(implementation); + } +} diff --git a/src/contracts/multichain/BN254CertificateVerifier.sol b/src/contracts/multichain/BN254CertificateVerifier.sol index 210f4e8474..6be8db7567 100644 --- a/src/contracts/multichain/BN254CertificateVerifier.sol +++ b/src/contracts/multichain/BN254CertificateVerifier.sol @@ -7,7 +7,6 @@ import "../libraries/BN254.sol"; import "../libraries/BN254SignatureVerifier.sol"; import "../libraries/Merkle.sol"; import "../libraries/OperatorSetLib.sol"; -import "../mixins/SemVerMixin.sol"; import "../mixins/LeafCalculatorMixin.sol"; import "./BN254CertificateVerifierStorage.sol"; @@ -17,12 +16,7 @@ import "./BN254CertificateVerifierStorage.sol"; * @dev This contract uses BN254 curves for signature verification and * caches operator information for efficient verification */ -contract BN254CertificateVerifier is - Initializable, - BN254CertificateVerifierStorage, - SemVerMixin, - LeafCalculatorMixin -{ +contract BN254CertificateVerifier is Initializable, BN254CertificateVerifierStorage, LeafCalculatorMixin { using Merkle for bytes; using BN254 for BN254.G1Point; @@ -48,12 +42,10 @@ contract BN254CertificateVerifier is * @notice Constructor for the certificate verifier * @dev Disables initializers to prevent implementation initialization * @param _operatorTableUpdater Address authorized to update operator tables - * @param _version The semantic version of the contract */ constructor( - IOperatorTableUpdater _operatorTableUpdater, - string memory _version - ) BN254CertificateVerifierStorage(_operatorTableUpdater) SemVerMixin(_version) { + IOperatorTableUpdater _operatorTableUpdater + ) BN254CertificateVerifierStorage(_operatorTableUpdater) { _disableInitializers(); } diff --git a/src/contracts/multichain/CrossChainRegistry.sol b/src/contracts/multichain/CrossChainRegistry.sol index fb4e62c91b..88d4b173d8 100644 --- a/src/contracts/multichain/CrossChainRegistry.sol +++ b/src/contracts/multichain/CrossChainRegistry.sol @@ -4,7 +4,6 @@ pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "../mixins/PermissionControllerMixin.sol"; -import "../mixins/SemVerMixin.sol"; import "../permissions/Pausable.sol"; import "../interfaces/IKeyRegistrar.sol"; import "./CrossChainRegistryStorage.sol"; @@ -20,8 +19,7 @@ contract CrossChainRegistry is OwnableUpgradeable, Pausable, CrossChainRegistryStorage, - PermissionControllerMixin, - SemVerMixin + PermissionControllerMixin { using EnumerableMap for EnumerableMap.UintToAddressMap; using EnumerableSet for EnumerableSet.Bytes32Set; @@ -64,19 +62,16 @@ contract CrossChainRegistry is * @param _keyRegistrar The key registrar for operator set curve type validation * @param _permissionController The permission controller for access control * @param _pauserRegistry The pauser registry for pause functionality - * @param _version The semantic version of the contract */ constructor( IAllocationManager _allocationManager, IKeyRegistrar _keyRegistrar, IPermissionController _permissionController, - IPauserRegistry _pauserRegistry, - string memory _version + IPauserRegistry _pauserRegistry ) CrossChainRegistryStorage(_allocationManager, _keyRegistrar) PermissionControllerMixin(_permissionController) Pausable(_pauserRegistry) - SemVerMixin(_version) { _disableInitializers(); } diff --git a/src/contracts/multichain/OperatorTableUpdater.sol b/src/contracts/multichain/OperatorTableUpdater.sol index 91a4ccb321..5babf85596 100644 --- a/src/contracts/multichain/OperatorTableUpdater.sol +++ b/src/contracts/multichain/OperatorTableUpdater.sol @@ -7,7 +7,6 @@ import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol import "../libraries/Merkle.sol"; import "../permissions/Pausable.sol"; -import "../mixins/SemVerMixin.sol"; import "../mixins/LeafCalculatorMixin.sol"; import "./OperatorTableUpdaterStorage.sol"; @@ -16,7 +15,6 @@ contract OperatorTableUpdater is OwnableUpgradeable, Pausable, OperatorTableUpdaterStorage, - SemVerMixin, LeafCalculatorMixin, ReentrancyGuardUpgradeable { @@ -28,13 +26,8 @@ contract OperatorTableUpdater is constructor( IBN254CertificateVerifier _bn254CertificateVerifier, IECDSACertificateVerifier _ecdsaCertificateVerifier, - IPauserRegistry _pauserRegistry, - string memory _version - ) - OperatorTableUpdaterStorage(_bn254CertificateVerifier, _ecdsaCertificateVerifier) - Pausable(_pauserRegistry) - SemVerMixin(_version) - { + IPauserRegistry _pauserRegistry + ) OperatorTableUpdaterStorage(_bn254CertificateVerifier, _ecdsaCertificateVerifier) Pausable(_pauserRegistry) { _disableInitializers(); } diff --git a/src/contracts/permissions/KeyRegistrar.sol b/src/contracts/permissions/KeyRegistrar.sol index 7830a3063a..716c6c8291 100644 --- a/src/contracts/permissions/KeyRegistrar.sol +++ b/src/contracts/permissions/KeyRegistrar.sol @@ -107,20 +107,16 @@ contract KeyRegistrar is KeyRegistrarStorage, PermissionControllerMixin, Signatu emit KeyDeregistered(operatorSet, operator, curveType); } - /** - * - * INTERNAL FUNCTIONS - * - */ - - /** - * @notice Validates and registers an ECDSA address with EIP-712 signature verification - * @param operatorSet The operator set to register the key for - * @param operator Address of the operator - * @param keyData The ECDSA address encoded as bytes (20 bytes) - * @param signature EIP-712 signature over the registration message - * @dev Validates address format, verifies signature ownership, and ensures global uniqueness - */ + /// + /// INTERNAL FUNCTIONS + /// + + /// @notice Validates and registers an ECDSA address with EIP-712 signature verification + /// @param operatorSet The operator set to register the key for + /// @param operator Address of the operator + /// @param keyData The ECDSA address encoded as bytes (20 bytes) + /// @param signature EIP-712 signature over the registration message + /// @dev Validates address format, verifies signature ownership, and ensures global uniqueness function _registerECDSAKey( OperatorSet memory operatorSet, address operator, @@ -149,14 +145,12 @@ contract KeyRegistrar is KeyRegistrarStorage, PermissionControllerMixin, Signatu _storeKeyData(operatorSet, operator, keyData, keyHash); } - /** - * @notice Validates and registers a BN254 public key with proper signature verification - * @param operatorSet The operator set to register the key for - * @param operator Address of the operator - * @param keyData The BN254 public key bytes (G1 and G2 components) - * @param signature Signature proving key ownership - * @dev Validates keypair, verifies signature using hash-to-G1, and ensures global uniqueness - */ + /// @notice Validates and registers a BN254 public key with proper signature verification + /// @param operatorSet The operator set to register the key for + /// @param operator Address of the operator + /// @param keyData The BN254 public key bytes (G1 and G2 components) + /// @param signature Signature proving key ownership + /// @dev Validates keypair, verifies signature using hash-to-G1, and ensures global uniqueness function _registerBN254Key( OperatorSet memory operatorSet, address operator, @@ -202,13 +196,11 @@ contract KeyRegistrar is KeyRegistrarStorage, PermissionControllerMixin, Signatu _storeKeyData(operatorSet, operator, keyData, keyHash); } - /** - * @notice Internal helper to store key data and update global registry - * @param operatorSet The operator set - * @param operator The operator address - * @param pubkey The public key data - * @param keyHash The key hash - */ + /// @notice Internal helper to store key data and update global registry + /// @param operatorSet The operator set + /// @param operator The operator address + /// @param pubkey The public key data + /// @param keyHash The key hash function _storeKeyData( OperatorSet memory operatorSet, address operator, @@ -225,13 +217,14 @@ contract KeyRegistrar is KeyRegistrarStorage, PermissionControllerMixin, Signatu _keyHashToOperator[keyHash] = operator; } - /** - * @notice Internal helper to get key hash for pubkey data using consistent hashing - * @param pubkey The public key data - * @param curveType The curve type (ECDSA or BN254) - * @return keyHash The key hash - */ - function _getKeyHashForKeyData(bytes memory pubkey, CurveType curveType) internal pure returns (bytes32) { + /// @notice Internal helper to get key hash for pubkey data using consistent hashing + /// @param pubkey The public key data + /// @param curveType The curve type (ECDSA or BN254) + /// @return keyHash The key hash + function _getKeyHashForKeyData( + bytes memory pubkey, + CurveType curveType + ) internal pure returns (bytes32) { if (curveType == CurveType.ECDSA) { return keccak256(pubkey); } else if (curveType == CurveType.BN254) { @@ -242,11 +235,9 @@ contract KeyRegistrar is KeyRegistrarStorage, PermissionControllerMixin, Signatu revert InvalidCurveType(); } - /** - * - * VIEW FUNCTIONS - * - */ + /// + /// VIEW FUNCTIONS + /// /// @inheritdoc IKeyRegistrar function isRegistered(OperatorSet memory operatorSet, address operator) public view returns (bool) { diff --git a/src/contracts/permissions/KeyRegistrarStorage.sol b/src/contracts/permissions/KeyRegistrarStorage.sol index fdf507fdec..5ea868b240 100644 --- a/src/contracts/permissions/KeyRegistrarStorage.sol +++ b/src/contracts/permissions/KeyRegistrarStorage.sol @@ -32,10 +32,8 @@ abstract contract KeyRegistrarStorage is IKeyRegistrar { allocationManager = _allocationManager; } - /** - * @dev This empty reserved space is put in place to allow future versions to add new - * variables without shifting down storage in the inheritance chain. - * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps - */ + /// @dev This empty reserved space is put in place to allow future versions to add new + /// variables without shifting down storage in the inheritance chain. + /// See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps uint256[46] private __gap; } diff --git a/src/contracts/permissions/PermissionController.sol b/src/contracts/permissions/PermissionController.sol index ee367d79d8..46bdea5bde 100644 --- a/src/contracts/permissions/PermissionController.sol +++ b/src/contracts/permissions/PermissionController.sol @@ -2,10 +2,9 @@ pragma solidity ^0.8.27; import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; -import "../mixins/SemVerMixin.sol"; import "./PermissionControllerStorage.sol"; -contract PermissionController is Initializable, SemVerMixin, PermissionControllerStorage { +contract PermissionController is Initializable, PermissionControllerStorage { using EnumerableSet for *; modifier onlyAdmin( @@ -20,9 +19,7 @@ contract PermissionController is Initializable, SemVerMixin, PermissionControlle * INITIALIZING FUNCTIONS * */ - constructor( - string memory _version - ) SemVerMixin(_version) { + constructor() { _disableInitializers(); } diff --git a/src/contracts/pods/EigenPod.sol b/src/contracts/pods/EigenPod.sol index 94117ddca1..626342ddf9 100644 --- a/src/contracts/pods/EigenPod.sol +++ b/src/contracts/pods/EigenPod.sol @@ -7,8 +7,6 @@ import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; import "../libraries/BeaconChainProofs.sol"; -import "../mixins/SemVerMixin.sol"; - import "../interfaces/IETHPOSDeposit.sol"; import "../interfaces/IEigenPodManager.sol"; import "../interfaces/IPausable.sol"; @@ -24,13 +22,7 @@ import "./EigenPodStorage.sol"; * @dev Note that all beacon chain balances are stored as gwei within the beacon chain datastructures. We choose * to account balances in terms of gwei in the EigenPod contract and convert to wei when making calls to other contracts */ -contract EigenPod is - Initializable, - ReentrancyGuardUpgradeable, - EigenPodPausingConstants, - EigenPodStorage, - SemVerMixin -{ +contract EigenPod is Initializable, ReentrancyGuardUpgradeable, EigenPodPausingConstants, EigenPodStorage { using SafeERC20 for IERC20; using BeaconChainProofs for *; @@ -105,11 +97,7 @@ contract EigenPod is * CONSTRUCTOR / INIT * */ - constructor( - IETHPOSDeposit _ethPOS, - IEigenPodManager _eigenPodManager, - string memory _version - ) SemVerMixin(_version) { + constructor(IETHPOSDeposit _ethPOS, IEigenPodManager _eigenPodManager) { ethPOS = _ethPOS; eigenPodManager = _eigenPodManager; _disableInitializers(); diff --git a/src/contracts/pods/EigenPodManager.sol b/src/contracts/pods/EigenPodManager.sol index 1c5822e921..a021a06073 100644 --- a/src/contracts/pods/EigenPodManager.sol +++ b/src/contracts/pods/EigenPodManager.sol @@ -8,7 +8,6 @@ import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; import "@openzeppelin-upgrades/contracts/security/ReentrancyGuardUpgradeable.sol"; import "../libraries/SlashingLib.sol"; -import "../mixins/SemVerMixin.sol"; import "../permissions/Pausable.sol"; import "./EigenPodPausingConstants.sol"; import "./EigenPodManagerStorage.sol"; @@ -29,8 +28,7 @@ contract EigenPodManager is Pausable, EigenPodPausingConstants, EigenPodManagerStorage, - ReentrancyGuardUpgradeable, - SemVerMixin + ReentrancyGuardUpgradeable { using SlashingLib for *; using Math for *; @@ -57,13 +55,8 @@ contract EigenPodManager is IETHPOSDeposit _ethPOS, IBeacon _eigenPodBeacon, IDelegationManager _delegationManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) - EigenPodManagerStorage(_ethPOS, _eigenPodBeacon, _delegationManager) - Pausable(_pauserRegistry) - SemVerMixin(_version) - { + IPauserRegistry _pauserRegistry + ) EigenPodManagerStorage(_ethPOS, _eigenPodBeacon, _delegationManager) Pausable(_pauserRegistry) { _disableInitializers(); } diff --git a/src/contracts/strategies/EigenStrategy.sol b/src/contracts/strategies/EigenStrategy.sol index 1bde13901d..e8d47ac910 100644 --- a/src/contracts/strategies/EigenStrategy.sol +++ b/src/contracts/strategies/EigenStrategy.sol @@ -38,9 +38,8 @@ contract EigenStrategy is StrategyBase { /// @notice Since this contract is designed to be initializable, the constructor simply sets `strategyManager`, the only immutable variable. constructor( IStrategyManager _strategyManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) StrategyBase(_strategyManager, _pauserRegistry, _version) {} + IPauserRegistry _pauserRegistry + ) StrategyBase(_strategyManager, _pauserRegistry) {} function initialize(IEigen _EIGEN, IERC20 _bEIGEN) public virtual initializer { EIGEN = _EIGEN; diff --git a/src/contracts/strategies/StrategyBase.sol b/src/contracts/strategies/StrategyBase.sol index 18824c7bb5..09d8c3b55f 100644 --- a/src/contracts/strategies/StrategyBase.sol +++ b/src/contracts/strategies/StrategyBase.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.27; import "../interfaces/IStrategyManager.sol"; import "../permissions/Pausable.sol"; -import "../mixins/SemVerMixin.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; @@ -29,7 +28,7 @@ import "@openzeppelin-upgrades/contracts/proxy/utils/Initializable.sol"; * [this thread](https://github.com/OpenZeppelin/openzeppelin-contracts/issues/3706) on the OpenZeppelin repo. * We specifically use a share offset of `SHARES_OFFSET` and a balance offset of `BALANCE_OFFSET`. */ -contract StrategyBase is Initializable, Pausable, IStrategy, SemVerMixin { +contract StrategyBase is Initializable, Pausable, IStrategy { using SafeERC20 for IERC20; uint8 internal constant PAUSED_DEPOSITS = 0; @@ -70,11 +69,7 @@ contract StrategyBase is Initializable, Pausable, IStrategy, SemVerMixin { } /// @notice Since this contract is designed to be initializable, the constructor simply sets `strategyManager`, the only immutable variable. - constructor( - IStrategyManager _strategyManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) Pausable(_pauserRegistry) SemVerMixin(_version) { + constructor(IStrategyManager _strategyManager, IPauserRegistry _pauserRegistry) Pausable(_pauserRegistry) { strategyManager = _strategyManager; _disableInitializers(); } diff --git a/src/contracts/strategies/StrategyBaseTVLLimits.sol b/src/contracts/strategies/StrategyBaseTVLLimits.sol index 65eca55877..ac972822e8 100644 --- a/src/contracts/strategies/StrategyBaseTVLLimits.sol +++ b/src/contracts/strategies/StrategyBaseTVLLimits.sol @@ -26,9 +26,8 @@ contract StrategyBaseTVLLimits is StrategyBase { // solhint-disable-next-line no-empty-blocks constructor( IStrategyManager _strategyManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) StrategyBase(_strategyManager, _pauserRegistry, _version) {} + IPauserRegistry _pauserRegistry + ) StrategyBase(_strategyManager, _pauserRegistry) {} function initialize( uint256 _maxPerDeposit, diff --git a/src/contracts/strategies/StrategyFactory.sol b/src/contracts/strategies/StrategyFactory.sol index 385bdcd839..20ded2db2e 100644 --- a/src/contracts/strategies/StrategyFactory.sol +++ b/src/contracts/strategies/StrategyFactory.sol @@ -3,7 +3,6 @@ pragma solidity ^0.8.27; import "@openzeppelin/contracts/proxy/beacon/BeaconProxy.sol"; import "@openzeppelin-upgrades/contracts/access/OwnableUpgradeable.sol"; -import "../mixins/SemVerMixin.sol"; import "./StrategyFactoryStorage.sol"; import "./StrategyBase.sol"; import "../permissions/Pausable.sol"; @@ -15,18 +14,14 @@ import "../permissions/Pausable.sol"; * @notice Terms of Service: https://docs.eigenlayer.xyz/overview/terms-of-service * @dev This may not be compatible with non-standard ERC20 tokens. Caution is warranted. */ -contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable, SemVerMixin { +contract StrategyFactory is StrategyFactoryStorage, OwnableUpgradeable, Pausable { uint8 internal constant PAUSED_NEW_STRATEGIES = 0; /// @notice EigenLayer's StrategyManager contract IStrategyManager public immutable strategyManager; /// @notice Since this contract is designed to be initializable, the constructor simply sets the immutable variables. - constructor( - IStrategyManager _strategyManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) Pausable(_pauserRegistry) SemVerMixin(_version) { + constructor(IStrategyManager _strategyManager, IPauserRegistry _pauserRegistry) Pausable(_pauserRegistry) { strategyManager = _strategyManager; _disableInitializers(); } diff --git a/src/test/DevnetLifecycle.t.sol b/src/test/DevnetLifecycle.t.sol index e60d847d29..be4612d678 100644 --- a/src/test/DevnetLifecycle.t.sol +++ b/src/test/DevnetLifecycle.t.sol @@ -22,7 +22,7 @@ contract Devnet_Lifecycle_Test is Test, IAllocationManagerTypes { DelegationManager public delegationManager; StrategyManager public strategyManager; AVSDirectory public avsDirectory; - AllocationManager public allocationManager; + IAllocationManager public allocationManager; StrategyBase public wethStrategy; IERC20 public weth; @@ -46,7 +46,7 @@ contract Devnet_Lifecycle_Test is Test, IAllocationManagerTypes { delegationManager = DelegationManager(0x3391eBafDD4b2e84Eeecf1711Ff9FC06EF9Ed182); strategyManager = StrategyManager(0x70f8bC2Da145b434de66114ac539c9756eF64fb3); avsDirectory = AVSDirectory(0xCa839541648D3e23137457b1Fd4A06bccEADD33a); - allocationManager = AllocationManager(0xAbD5Dd30CaEF8598d4EadFE7D45Fd582EDEade15); + allocationManager = IAllocationManager(0xAbD5Dd30CaEF8598d4EadFE7D45Fd582EDEade15); wethStrategy = StrategyBase(0x4f812633943022fA97cb0881683aAf9f318D5Caa); weth = IERC20(0x94373a4919B3240D86eA41593D5eBa789FEF3848); diff --git a/src/test/harnesses/AllocationManagerHarness.sol b/src/test/harnesses/AllocationManagerHarness.sol index dd8ec83525..48865e79e3 100644 --- a/src/test/harnesses/AllocationManagerHarness.sol +++ b/src/test/harnesses/AllocationManagerHarness.sol @@ -9,6 +9,7 @@ contract AllocationManagerHarness is AllocationManager { using DoubleEndedQueue for DoubleEndedQueue.Bytes32Deque; constructor( + IAllocationManagerView _allocationManagerView, IDelegationManager _delegation, IStrategy _eigenStrategy, IPauserRegistry _pauserRegistry, @@ -17,17 +18,21 @@ contract AllocationManagerHarness is AllocationManager { uint32 _ALLOCATION_CONFIGURATION_DELAY ) AllocationManager( + _allocationManagerView, _delegation, _eigenStrategy, _pauserRegistry, _permissionController, _DEALLOCATION_DELAY, - _ALLOCATION_CONFIGURATION_DELAY, - TestConstants.TEST_VERSION + _ALLOCATION_CONFIGURATION_DELAY ) {} function deallocationQueueAtIndex(address operator, IStrategy strategy, uint index) external view returns (bytes32) { return deallocationQueue[operator][strategy].at(index); } + + function setSlasherToZero(OperatorSet memory operatorSet) external { + _slashers[operatorSet.key()] = SlasherParams(address(0), address(0), 0); + } } diff --git a/src/test/harnesses/EigenPodHarness.sol b/src/test/harnesses/EigenPodHarness.sol index ae912b3a0a..8d590c4447 100644 --- a/src/test/harnesses/EigenPodHarness.sol +++ b/src/test/harnesses/EigenPodHarness.sol @@ -5,9 +5,7 @@ import "../../contracts/pods/EigenPod.sol"; import "forge-std/Test.sol"; contract EigenPodHarness is EigenPod { - constructor(IETHPOSDeposit _ethPOS, IEigenPodManager _eigenPodManager, string memory _version) - EigenPod(_ethPOS, _eigenPodManager, _version) - {} + constructor(IETHPOSDeposit _ethPOS, IEigenPodManager _eigenPodManager) EigenPod(_ethPOS, _eigenPodManager) {} function getActiveValidatorCount() public view returns (uint) { return activeValidatorCount; diff --git a/src/test/harnesses/EigenPodManagerWrapper.sol b/src/test/harnesses/EigenPodManagerWrapper.sol index 34f5738c0f..bc4a8b6d31 100644 --- a/src/test/harnesses/EigenPodManagerWrapper.sol +++ b/src/test/harnesses/EigenPodManagerWrapper.sol @@ -5,13 +5,9 @@ import "../../contracts/pods/EigenPodManager.sol"; ///@notice This contract exposes a manual setter for podShares in order to initialize podShares as negative contract EigenPodManagerWrapper is EigenPodManager { - constructor( - IETHPOSDeposit _ethPOS, - IBeacon _eigenPodBeacon, - IDelegationManager _delegationManager, - IPauserRegistry _pauserRegistry, - string memory _version - ) EigenPodManager(_ethPOS, _eigenPodBeacon, _delegationManager, _pauserRegistry, _version) {} + constructor(IETHPOSDeposit _ethPOS, IBeacon _eigenPodBeacon, IDelegationManager _delegationManager, IPauserRegistry _pauserRegistry) + EigenPodManager(_ethPOS, _eigenPodBeacon, _delegationManager, _pauserRegistry) + {} function setPodOwnerShares(address owner, IEigenPod pod) external { ownerToPod[owner] = pod; diff --git a/src/test/integration/IntegrationBase.t.sol b/src/test/integration/IntegrationBase.t.sol index 18454c7e06..3d53c570b4 100644 --- a/src/test/integration/IntegrationBase.t.sol +++ b/src/test/integration/IntegrationBase.t.sol @@ -86,8 +86,6 @@ abstract contract IntegrationBase is IntegrationDeployer, TypeImporter { /// Registration flow is the same pre and post redistribution upgrade operator.registerAsOperator(); - rollForward({blocks: ALLOCATION_CONFIGURATION_DELAY + 1}); - assert_Snap_Added_OperatorShares(operator, strategies, addedShares, "_newRandomOperator: failed to award shares to operator"); assertTrue(delegationManager.isOperator(address(operator)), "_newRandomOperator: operator should be registered"); assertEq(delegationManager.delegatedTo(address(operator)), address(operator), "_newRandomOperator: should be self-delegated"); @@ -101,8 +99,6 @@ abstract contract IntegrationBase is IntegrationDeployer, TypeImporter { /// Registration flow is the same pre and post redistribution upgrade operator.registerAsOperator(); - rollForward({blocks: ALLOCATION_CONFIGURATION_DELAY + 1}); - assertTrue(delegationManager.isOperator(address(operator)), "_newRandomOperator: operator should be registered"); assertEq(delegationManager.delegatedTo(address(operator)), address(operator), "_newRandomOperator: should be self-delegated"); return operator; @@ -136,6 +132,16 @@ abstract contract IntegrationBase is IntegrationDeployer, TypeImporter { ++numAVSs; } + /// @dev Creates a new AVS with the *soon to be deprecated* `createOperatorSets` method without a slasher + /// @dev This method is only used by the slasher migration test + function _newRandomAVS_v1CreateSet() internal returns (AVS avs, OperatorSet[] memory operatorSets) { + string memory avsName = string.concat("avs", numAVSs.toString()); + avs = _genRandAVS(avsName); + avs.updateAVSMetadataURI("https://example.com"); + operatorSets = avs.createOperatorSets_v1(_randomStrategies()); + ++numAVSs; + } + function _newRandomAVS_WithBN254() internal returns (AVS avs, OperatorSet[] memory operatorSets) { string memory avsName = string.concat("avs", numAVSs.toString()); avs = _genRandAVS(avsName); @@ -2548,6 +2554,10 @@ abstract contract IntegrationBase is IntegrationDeployer, TypeImporter { cheats.roll(latest + delegationManager.minWithdrawalDelayBlocks() + 1); } + function _rollForward_AllocationConfigurationDelay() internal { + rollForward(allocationManager.ALLOCATION_CONFIGURATION_DELAY() + 1); + } + function _rollForward_AllocationDelay(User operator) internal { uint32 delay = _getExistingAllocationDelay(operator); rollForward(delay); diff --git a/src/test/integration/IntegrationDeployer.t.sol b/src/test/integration/IntegrationDeployer.t.sol index dc40b1c87b..c03da8f5b6 100644 --- a/src/test/integration/IntegrationDeployer.t.sol +++ b/src/test/integration/IntegrationDeployer.t.sol @@ -11,6 +11,7 @@ import "forge-std/Test.sol"; import "src/contracts/core/DelegationManager.sol"; import "src/contracts/core/AllocationManager.sol"; +import "src/contracts/core/AllocationManagerView.sol"; import "src/contracts/core/StrategyManager.sol"; import "src/contracts/strategies/StrategyFactory.sol"; import "src/contracts/strategies/StrategyBase.sol"; @@ -37,7 +38,7 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // Fork ids for specific fork tests bool isUpgraded; - uint mainnetForkBlock = 22_514_370; // Post Pectra Compatibility Upgrade + uint mainnetForkBlock = 23_634_615; // Post Redistribution Upgrade string version = "9.9.9"; @@ -307,8 +308,9 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { } if (address(allocationManager) == address(0)) { allocationManager = - AllocationManager(address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), ""))); + IAllocationManager(address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), ""))); } + // allocationManagerView is deployed as a standalone implementation (not a proxy) in _deployImplementations() if (address(permissionController) == address(0)) { permissionController = PermissionController(address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), ""))); @@ -323,16 +325,24 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { /// Deploy an implementation contract for each contract in the system function _deployImplementations() public { - allocationManagerImplementation = new AllocationManager( - delegationManager, - eigenStrategy, - eigenLayerPauserReg, - permissionController, - DEALLOCATION_DELAY, - ALLOCATION_CONFIGURATION_DELAY, - version + // Deploy AllocationManagerView as a standalone implementation (not a proxy) + allocationManagerView = + new AllocationManagerView(delegationManager, eigenStrategy, DEALLOCATION_DELAY, ALLOCATION_CONFIGURATION_DELAY); + + allocationManagerImplementation = IAllocationManager( + address( + new AllocationManager( + allocationManagerView, + delegationManager, + eigenStrategy, + eigenLayerPauserReg, + permissionController, + DEALLOCATION_DELAY, + ALLOCATION_CONFIGURATION_DELAY + ) + ) ); - permissionControllerImplementation = new PermissionController(version); + permissionControllerImplementation = new PermissionController(); delegationManagerImplementation = new DelegationManager( strategyManager, eigenPodManager, @@ -354,18 +364,16 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { MAX_REWARDS_DURATION: REWARDS_COORDINATOR_MAX_REWARDS_DURATION, MAX_RETROACTIVE_LENGTH: REWARDS_COORDINATOR_MAX_RETROACTIVE_LENGTH, MAX_FUTURE_LENGTH: REWARDS_COORDINATOR_MAX_FUTURE_LENGTH, - GENESIS_REWARDS_TIMESTAMP: REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP, - version: version + GENESIS_REWARDS_TIMESTAMP: REWARDS_COORDINATOR_GENESIS_REWARDS_TIMESTAMP }) ); avsDirectoryImplementation = new AVSDirectory(delegationManager, eigenLayerPauserReg, version); - eigenPodManagerImplementation = - new EigenPodManager(DEPOSIT_CONTRACT, eigenPodBeacon, delegationManager, eigenLayerPauserReg, "9.9.9"); - strategyFactoryImplementation = new StrategyFactory(strategyManager, eigenLayerPauserReg, "9.9.9"); + eigenPodManagerImplementation = new EigenPodManager(DEPOSIT_CONTRACT, eigenPodBeacon, delegationManager, eigenLayerPauserReg); + strategyFactoryImplementation = new StrategyFactory(strategyManager, eigenLayerPauserReg); // Beacon implementations - eigenPodImplementation = new EigenPod(DEPOSIT_CONTRACT, eigenPodManager, "v9.9.9"); - baseStrategyImplementation = new StrategyBase(strategyManager, eigenLayerPauserReg, "v9.9.9"); + eigenPodImplementation = new EigenPod(DEPOSIT_CONTRACT, eigenPodManager); + baseStrategyImplementation = new StrategyBase(strategyManager, eigenLayerPauserReg); // Pre-longtail StrategyBaseTVLLimits implementation // TODO - need to update ExistingDeploymentParser @@ -429,6 +437,11 @@ abstract contract IntegrationDeployer is ExistingDeploymentParser { // Key Registrar eigenLayerProxyAdmin.upgrade(ITransparentUpgradeableProxy(payable(address(keyRegistrar))), address(keyRegistrarImplementation)); + + // PermissionController + eigenLayerProxyAdmin.upgrade( + ITransparentUpgradeableProxy(payable(address(permissionController))), address(permissionControllerImplementation) + ); } function _initializeProxies() public noTracing { diff --git a/src/test/integration/MultichainIntegrationBase.t.sol b/src/test/integration/MultichainIntegrationBase.t.sol index 7562bc4814..62476f6cea 100644 --- a/src/test/integration/MultichainIntegrationBase.t.sol +++ b/src/test/integration/MultichainIntegrationBase.t.sol @@ -77,7 +77,7 @@ abstract contract MultichainIntegrationBase is IntegrationBase { // Deploy CrossChainRegistry with required dependencies crossChainRegistryImplementation = - new CrossChainRegistry(allocationManager, keyRegistrar, permissionController, eigenLayerPauserReg, "1.0.0"); + new CrossChainRegistry(allocationManager, keyRegistrar, permissionController, eigenLayerPauserReg); crossChainRegistry = CrossChainRegistry( address(new TransparentUpgradeableProxy(address(crossChainRegistryImplementation), address(eigenLayerProxyAdmin), "")) @@ -96,7 +96,7 @@ abstract contract MultichainIntegrationBase is IntegrationBase { OperatorTableUpdater(address(new TransparentUpgradeableProxy(address(emptyContract), address(eigenLayerProxyAdmin), ""))); // Deploy BN254CertificateVerifier - bn254CertificateVerifierImplementation = new BN254CertificateVerifier(IOperatorTableUpdater(address(operatorTableUpdater)), "1.0.0"); + bn254CertificateVerifierImplementation = new BN254CertificateVerifier(IOperatorTableUpdater(address(operatorTableUpdater))); bn254CertificateVerifier = BN254CertificateVerifier( address(new TransparentUpgradeableProxy(address(bn254CertificateVerifierImplementation), address(eigenLayerProxyAdmin), "")) @@ -113,8 +113,7 @@ abstract contract MultichainIntegrationBase is IntegrationBase { OperatorTableUpdater newOperatorTableUpdaterImplementation = new OperatorTableUpdater( IBN254CertificateVerifier(address(bn254CertificateVerifier)), IECDSACertificateVerifier(address(ecdsaCertificateVerifier)), - eigenLayerPauserReg, - "1.0.0" + eigenLayerPauserReg ); // Upgrade the proxy to use the new implementation with correct addresses diff --git a/src/test/integration/UpgradeTest.t.sol b/src/test/integration/UpgradeTest.t.sol index b192befeba..d77e7de1b7 100644 --- a/src/test/integration/UpgradeTest.t.sol +++ b/src/test/integration/UpgradeTest.t.sol @@ -20,13 +20,13 @@ abstract contract UpgradeTest is IntegrationCheckUtils { require(forkType == MAINNET, "_upgradeEigenLayerContracts: somehow running upgrade test locally"); require(!isUpgraded, "_upgradeEigenLayerContracts: already performed upgrade"); - emit log("_upgradeEigenLayerContracts: upgrading mainnet to redistribution"); + emit log("_upgradeEigenLayerContracts: upgrading mainnet to slashing UX improvements"); _upgradeMainnetContracts(); emit log("======"); isUpgraded = true; - emit log("_upgradeEigenLayerContracts: redistribution upgrade complete"); + emit log("_upgradeEigenLayerContracts: slashing UX improvements upgrade complete"); } } diff --git a/src/test/integration/tests/ALM_Multi.t.sol b/src/test/integration/tests/ALM_Multi.t.sol index 53e0b8d81a..f241b44ff5 100644 --- a/src/test/integration/tests/ALM_Multi.t.sol +++ b/src/test/integration/tests/ALM_Multi.t.sol @@ -67,11 +67,13 @@ contract Integration_ALM_Multi is IntegrationCheckUtils { } } + // TODO: FIX THIS OR REPLACE (SUPER FLAKEY) /// Reduce fuzz runs because this test is thiccc: /// /// forge-config: default.fuzz.runs = 3 /// forge-config: forktest.fuzz.runs = 3 function test_Multi(uint24 _r) public rand(_r) { + cheats.pauseGasMetering(); // Do 20 iterations for (uint i = 1; i <= NUM_ITERATIONS; i++) { console.log("%s: %d", "iter".green().italic(), i - 1); @@ -86,6 +88,7 @@ contract Integration_ALM_Multi is IntegrationCheckUtils { // Ensure all pending actions are completed for the next iteration _rollForward_DeallocationDelay(); } + cheats.resumeGasMetering(); } /// @dev NONE operators can: diff --git a/src/test/integration/tests/CrosschainDeployLib.t.sol b/src/test/integration/tests/CrosschainDeployLib.t.sol index ab39b0b592..d07ab20fc9 100644 --- a/src/test/integration/tests/CrosschainDeployLib.t.sol +++ b/src/test/integration/tests/CrosschainDeployLib.t.sol @@ -7,34 +7,74 @@ import "src/test/integration/IntegrationDeployer.t.sol"; /// @notice Sanity check for the crosschain deploy lib /// @dev We use the integration testing suite as it has RPC urls in our CI -contract Integration_CrosschainDeployLibTest is IntegrationDeployer { - function test_SameAddressEveryChain() public { - // Skip if we're not on a fork test profile - if (!isForktest()) return; +contract Integration_CrosschainDeployLibTest_Testnet is IntegrationDeployer { + // Addresses, taken from zeus + address hoodiDeployer = 0xA591635DE4C254BD3fa9C9Db9000eA6488344C28; + address hoodiExpectedEmptyContract = 0xa6192470D7D4c39f8F392167ADde283F60b34E15; + address hoodiExpectedProxyContract = 0xB99CC53e8db7018f557606C2a5B066527bF96b26; // Using type(TaskMailbox).name as name + address mainnetDeployer = 0xa3053EF25F1F7d9D55a7655372B8a31D0f40eCA9; + address mainnetExpectedEmptyContract = 0x70323BC7261136A002ab392F921D67ea52096dCf; + address mainnetExpectedProxyContract = 0x132b466d9d5723531F68797519DfED701aC2C749; - address deployer = 0xC10E5F3AF465Fe85A7077390797dc5ae89DAB9F1; + // Forks + uint mainnetFork; + uint hoodiFork; - vm.startPrank(deployer); + function setUp() public virtual override { + // Skip if we're not on a fork test profile + if (!isForktest()) vm.skip(true); - // Test empty contract deployment - uint hoodiFork = vm.createSelectFork(vm.envString("RPC_HOODI"), 1_549_268); - address hoodiExpected = CrosschainDeployLib.deployEmptyContract(deployer); - uint mainnetFork = vm.createSelectFork(vm.envString("RPC_MAINNET"), 22_819_288); - address mainnetExpected = CrosschainDeployLib.deployEmptyContract(deployer); - assertEq(hoodiExpected, mainnetExpected, "hoodiExpected != mainnetExpected"); + mainnetFork = vm.createSelectFork(vm.envString("RPC_MAINNET"), 22_819_288); + hoodiFork = vm.createSelectFork(vm.envString("RPC_HOODI"), 1_291_826); + } - // Test proxy deployment + /// @dev We test hoodi and mainnet in same function due to flakiness of `vm.setEnv` + function test_contracts_hoodi() public { + // Hoodi Fork vm.selectFork(hoodiFork); - address hoodiProxy = address(CrosschainDeployLib.deployCrosschainProxy(deployer, hoodiExpected, "ExampleContract")); + vm.setEnv("ZEUS_ENV", "preprod-hoodi"); + + // Deploy empty contract and proxy contract + cheats.startPrank(hoodiDeployer); + address emptyContract = CrosschainDeployLib.deployEmptyContract(hoodiDeployer); + address proxyContract = address(CrosschainDeployLib.deployCrosschainProxy(hoodiDeployer, emptyContract, type(TaskMailbox).name)); + cheats.stopPrank(); + + assertEq(emptyContract, hoodiExpectedEmptyContract, "emptyContract != hoodiExpectedEmptyContract"); + assertEq(proxyContract, hoodiExpectedProxyContract, "proxyContract != hoodiExpectedProxyContract"); + + // Mainnet fork vm.selectFork(mainnetFork); - address mainnetProxy = address(CrosschainDeployLib.deployCrosschainProxy(deployer, mainnetExpected, "ExampleContract")); - assertEq(hoodiProxy, mainnetProxy, "hoodiProxy != mainnetProxy"); + vm.setEnv("ZEUS_ENV", "mainnet"); + + // Deploy empty contract and proxy contract + cheats.startPrank(mainnetDeployer); + emptyContract = CrosschainDeployLib.deployEmptyContract(mainnetDeployer); + proxyContract = address(CrosschainDeployLib.deployCrosschainProxy(mainnetDeployer, emptyContract, type(TaskMailbox).name)); + cheats.stopPrank(); + + assertEq(emptyContract, mainnetExpectedEmptyContract, "emptyContract != mainnetExpectedEmptyContract"); + assertEq(proxyContract, mainnetExpectedProxyContract, "proxyContract != mainnetExpectedProxyContract"); + } + + function test_address_prediction() public { + // Get on mainnet fork + vm.selectFork(mainnetFork); + + // Empty Contract + bytes32 initCodeHash = keccak256(CrosschainDeployLib.EMPTY_CONTRACT_CREATION_CODE_PRODUCTION); + address expectedEmptyContract = + CrosschainDeployLib.computeCrosschainAddress(mainnetDeployer, initCodeHash, type(EmptyContract).name); + assertEq(expectedEmptyContract, mainnetExpectedEmptyContract, "expectedEmptyContract != mainnetExpectedEmptyContract"); - // Test address prediction - assertEq( - CrosschainDeployLib.computeCrosschainAddress(deployer, keccak256(type(EmptyContract).creationCode), "EmptyContract"), - hoodiExpected + // Proxy Contract + // Recreate the creationCode, because using vm.setEnv() is flaky in multiple functions in the same test contract + initCodeHash = keccak256( + abi.encodePacked( + CrosschainDeployLib.PROXY_CONTRACT_CREATION_CODE_PRODUCTION, abi.encode(mainnetExpectedEmptyContract, mainnetDeployer, "") + ) ); - assertEq(CrosschainDeployLib.computeCrosschainUpgradeableProxyAddress(deployer, hoodiExpected, "ExampleContract"), hoodiProxy); + address expectedProxyContract = CrosschainDeployLib.computeCrosschainAddress(mainnetDeployer, initCodeHash, type(TaskMailbox).name); + assertEq(expectedProxyContract, mainnetExpectedProxyContract, "expectedEmptyContract != mainnetExpectedProxyContract"); } } diff --git a/src/test/integration/tests/eigenpod/SlashBC_OneBCSF.t.sol b/src/test/integration/tests/eigenpod/SlashBC_OneBCSF.t.sol index c1b1e5a66f..a4159a608e 100644 --- a/src/test/integration/tests/eigenpod/SlashBC_OneBCSF.t.sol +++ b/src/test/integration/tests/eigenpod/SlashBC_OneBCSF.t.sol @@ -36,7 +36,7 @@ contract Integration_SlashBC_OneBCSF is IntegrationCheckUtils { function _init() internal override { // 1. etch a new implementation to set staker's beaconChainSlashingFactor to 1 EigenPodManagerWrapper eigenPodManagerWrapper = - new EigenPodManagerWrapper(DEPOSIT_CONTRACT, eigenPodBeacon, delegationManager, eigenLayerPauserReg, "9.9.9"); + new EigenPodManagerWrapper(DEPOSIT_CONTRACT, eigenPodBeacon, delegationManager, eigenLayerPauserReg); address targetAddr = address(eigenPodManagerImplementation); cheats.etch(targetAddr, address(eigenPodManagerWrapper).code); diff --git a/src/test/integration/tests/upgrade/AllocationManagerUpgrade.t.sol b/src/test/integration/tests/upgrade/AllocationManagerUpgrade.t.sol new file mode 100644 index 0000000000..2cceb2db62 --- /dev/null +++ b/src/test/integration/tests/upgrade/AllocationManagerUpgrade.t.sol @@ -0,0 +1,245 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "src/test/integration/UpgradeTest.t.sol"; +import {OperatorSet} from "src/contracts/libraries/OperatorSetLib.sol"; + +contract Integration_Upgrade_AllocationManager is UpgradeTest { + using ArrayLib for *; + using StdStyle for *; + // Storage state snapshots + + struct AllocationManagerState { + // Storage variables that should persist across upgrades + bool avsRegisteredMetadata; + uint slashCount; + address redistributionRecipient; + bool isRedistributingOperatorSet; + bool isOperatorSet; + uint operatorSetCount; + bool isMemberOfOperatorSet; + uint memberCount; + IStrategy[] strategiesInOperatorSet; + bool isOperatorSlashable; + bool isOperatorRedistributable; + uint64 encumberedMagnitude; + uint64 allocatableMagnitude; + uint64 maxMagnitude; + bool allocationDelayIsSet; + uint32 allocationDelay; + OperatorSet[] allocatedSets; + OperatorSet[] registeredSets; + IStrategy[] allocatedStrategies; + Allocation allocation; + OperatorSet[] strategyAllocationsOperatorSets; + Allocation[] strategyAllocations; + } + + User staker; + User operator; + AllocateParams allocateParams; + + AVS avs; + IStrategy[] strategies; + uint[] initTokenBalances; + uint[] initDepositShares; + OperatorSet operatorSet; + + /// Shared setup: + /// + /// 1. Generate staker with assets, operator, and AVS + /// 2. Staker deposits assets and delegates to operator + /// 3. AVS creates an operator set containing the strategies held by the staker + /// 4. Operator registers for the operator set + /// 5. Operator allocates to the operator set + /// 6. Roll blocks to complete allocation + function _init() internal override { + // 1. Create entities + (staker, strategies, initTokenBalances) = _newRandomStaker(); + operator = _newRandomOperator_NoAssets(); + (avs,) = _newRandomAVS_v1CreateSet(); + + operator.setAllocationDelay(ALLOCATION_CONFIGURATION_DELAY); + rollForward({blocks: ALLOCATION_CONFIGURATION_DELAY + 1}); + + // 2. Staker deposits into EigenLayer + staker.depositIntoEigenlayer(strategies, initTokenBalances); + initDepositShares = _calculateExpectedShares(strategies, initTokenBalances); + check_Deposit_State(staker, strategies, initDepositShares); + + // 3. Staker delegates to operator + staker.delegateTo(operator); + check_Delegation_State(staker, operator, strategies, initDepositShares); + + // 4. AVS creates an operator set containing the strategies held by the staker + operatorSet = avs.createOperatorSet_v1(strategies); + + // 5. Operator registers for the operator set + operator.registerForOperatorSet(operatorSet); + check_Registration_State_NoAllocation(operator, operatorSet, allStrats); + + // 6. Operator allocates to the operator set + allocateParams = _genAllocation_AllAvailable(operator, operatorSet); + operator.modifyAllocations(allocateParams); + check_IncrAlloc_State_Slashable(operator, allocateParams); + + // 7. Roll blocks to complete allocation + _rollBlocksForCompleteAllocation(operator, operatorSet, strategies); + } + + function testFuzz_query_upgrade_compare(uint24 r) public rand(r) { + AllocationManagerState memory preUpgrade = _captureAllocationManagerState(); + _upgradeEigenLayerContracts(); + AllocationManagerState memory postUpgrade = _captureAllocationManagerState(); + _verifyStorageStateConsistency(preUpgrade, postUpgrade); + } + + function _captureAllocationManagerState() internal view returns (AllocationManagerState memory state) { + // Capture storage variables that should persist across upgrades + state.isOperatorSet = allocationManager.isOperatorSet(operatorSet); + state.operatorSetCount = allocationManager.getOperatorSetCount(address(avs)); + state.isMemberOfOperatorSet = allocationManager.isMemberOfOperatorSet(address(operator), operatorSet); + state.memberCount = allocationManager.getMemberCount(operatorSet); + state.strategiesInOperatorSet = allocationManager.getStrategiesInOperatorSet(operatorSet); + state.isOperatorSlashable = allocationManager.isOperatorSlashable(address(operator), operatorSet); + state.isOperatorRedistributable = allocationManager.isOperatorRedistributable(address(operator)); + + // Only query strategy-related data if we have at least one strategy + if (strategies.length > 0 && address(strategies[0]) != address(0)) { + state.encumberedMagnitude = allocationManager.getEncumberedMagnitude(address(operator), strategies[0]); + state.allocatableMagnitude = allocationManager.getAllocatableMagnitude(address(operator), strategies[0]); + state.maxMagnitude = allocationManager.getMaxMagnitude(address(operator), strategies[0]); + } else { + state.encumberedMagnitude = 0; + state.allocatableMagnitude = 0; + state.maxMagnitude = 0; + } + (state.allocationDelayIsSet, state.allocationDelay) = allocationManager.getAllocationDelay(address(operator)); + state.allocatedSets = allocationManager.getAllocatedSets(address(operator)); + state.registeredSets = allocationManager.getRegisteredSets(address(operator)); + state.allocatedStrategies = allocationManager.getAllocatedStrategies(address(operator), operatorSet); + // Only query allocation data if we have at least one strategy + if (strategies.length > 0 && address(strategies[0]) != address(0)) { + state.allocation = allocationManager.getAllocation(address(operator), operatorSet, strategies[0]); + (state.strategyAllocationsOperatorSets, state.strategyAllocations) = + allocationManager.getStrategyAllocations(address(operator), strategies[0]); + } else { + state.allocation = Allocation(0, 0, 0); + state.strategyAllocationsOperatorSets = new OperatorSet[](0); + state.strategyAllocations = new Allocation[](0); + } + state.redistributionRecipient = allocationManager.getRedistributionRecipient(operatorSet); + state.isRedistributingOperatorSet = allocationManager.isRedistributingOperatorSet(operatorSet); + state.slashCount = allocationManager.getSlashCount(operatorSet); + } + + function _verifyStorageStateConsistency(AllocationManagerState memory preUpgrade, AllocationManagerState memory postUpgrade) internal { + // Verify storage variables that should persist across upgrades + assertEq(preUpgrade.isOperatorSet, postUpgrade.isOperatorSet, "isOperatorSet should be the same"); + assertEq(preUpgrade.operatorSetCount, postUpgrade.operatorSetCount, "operatorSetCount should be the same"); + assertEq(preUpgrade.isMemberOfOperatorSet, postUpgrade.isMemberOfOperatorSet, "isMemberOfOperatorSet should be the same"); + assertEq(preUpgrade.memberCount, postUpgrade.memberCount, "memberCount should be the same"); + assertEq(preUpgrade.isOperatorSlashable, postUpgrade.isOperatorSlashable, "isOperatorSlashable should be the same"); + assertEq( + preUpgrade.isOperatorRedistributable, postUpgrade.isOperatorRedistributable, "isOperatorRedistributable should be the same" + ); + assertEq(preUpgrade.encumberedMagnitude, postUpgrade.encumberedMagnitude, "encumberedMagnitude should be the same"); + assertEq(preUpgrade.allocatableMagnitude, postUpgrade.allocatableMagnitude, "allocatableMagnitude should be the same"); + assertEq(preUpgrade.maxMagnitude, postUpgrade.maxMagnitude, "maxMagnitude should be the same"); + assertEq(preUpgrade.allocationDelayIsSet, postUpgrade.allocationDelayIsSet, "allocationDelayIsSet should be the same"); + assertEq(preUpgrade.allocationDelay, postUpgrade.allocationDelay, "allocationDelay should be the same"); + assertEq(preUpgrade.redistributionRecipient, postUpgrade.redistributionRecipient, "redistributionRecipient should be the same"); + assertEq( + preUpgrade.isRedistributingOperatorSet, + postUpgrade.isRedistributingOperatorSet, + "isRedistributingOperatorSet should be the same" + ); + assertEq(preUpgrade.slashCount, postUpgrade.slashCount, "slashCount should be the same"); + + // Verify array lengths + assertEq( + preUpgrade.strategiesInOperatorSet.length, + postUpgrade.strategiesInOperatorSet.length, + "strategiesInOperatorSet length should be the same" + ); + assertEq(preUpgrade.allocatedSets.length, postUpgrade.allocatedSets.length, "allocatedSets length should be the same"); + assertEq(preUpgrade.registeredSets.length, postUpgrade.registeredSets.length, "registeredSets length should be the same"); + assertEq( + preUpgrade.allocatedStrategies.length, postUpgrade.allocatedStrategies.length, "allocatedStrategies length should be the same" + ); + assertEq( + preUpgrade.strategyAllocationsOperatorSets.length, + postUpgrade.strategyAllocationsOperatorSets.length, + "strategyAllocationsOperatorSets length should be the same" + ); + assertEq( + preUpgrade.strategyAllocations.length, postUpgrade.strategyAllocations.length, "strategyAllocations length should be the same" + ); + + // Verify allocation struct + assertEq( + preUpgrade.allocation.currentMagnitude, + postUpgrade.allocation.currentMagnitude, + "allocation.currentMagnitude should be the same" + ); + assertEq(preUpgrade.allocation.pendingDiff, postUpgrade.allocation.pendingDiff, "allocation.pendingDiff should be the same"); + assertEq(preUpgrade.allocation.effectBlock, postUpgrade.allocation.effectBlock, "allocation.effectBlock should be the same"); + + // Verify array contents (if arrays have elements) + if (preUpgrade.strategiesInOperatorSet.length > 0) { + for (uint i = 0; i < preUpgrade.strategiesInOperatorSet.length; i++) { + assertEq( + address(preUpgrade.strategiesInOperatorSet[i]), + address(postUpgrade.strategiesInOperatorSet[i]), + "strategiesInOperatorSet element should be the same" + ); + } + } + + if (preUpgrade.allocatedSets.length > 0) { + for (uint i = 0; i < preUpgrade.allocatedSets.length; i++) { + assertEq(preUpgrade.allocatedSets[i].avs, postUpgrade.allocatedSets[i].avs, "allocatedSets avs should be the same"); + assertEq(preUpgrade.allocatedSets[i].id, postUpgrade.allocatedSets[i].id, "allocatedSets id should be the same"); + } + } + + if (preUpgrade.registeredSets.length > 0) { + for (uint i = 0; i < preUpgrade.registeredSets.length; i++) { + assertEq(preUpgrade.registeredSets[i].avs, postUpgrade.registeredSets[i].avs, "registeredSets avs should be the same"); + assertEq(preUpgrade.registeredSets[i].id, postUpgrade.registeredSets[i].id, "registeredSets id should be the same"); + } + } + + if (preUpgrade.allocatedStrategies.length > 0) { + for (uint i = 0; i < preUpgrade.allocatedStrategies.length; i++) { + assertEq( + address(preUpgrade.allocatedStrategies[i]), + address(postUpgrade.allocatedStrategies[i]), + "allocatedStrategies element should be the same" + ); + } + } + + if (preUpgrade.strategyAllocations.length > 0) { + for (uint i = 0; i < preUpgrade.strategyAllocations.length; i++) { + assertEq( + preUpgrade.strategyAllocations[i].currentMagnitude, + postUpgrade.strategyAllocations[i].currentMagnitude, + "strategyAllocations currentMagnitude should be the same" + ); + assertEq( + preUpgrade.strategyAllocations[i].pendingDiff, + postUpgrade.strategyAllocations[i].pendingDiff, + "strategyAllocations pendingDiff should be the same" + ); + assertEq( + preUpgrade.strategyAllocations[i].effectBlock, + postUpgrade.strategyAllocations[i].effectBlock, + "strategyAllocations effectBlock should be the same" + ); + } + } + + console.log("All storage state consistency checks passed!".green()); + } +} diff --git a/src/test/integration/tests/upgrade/Redistribution.t.sol b/src/test/integration/tests/upgrade/Redistribution.t.sol deleted file mode 100644 index 74a2d30269..0000000000 --- a/src/test/integration/tests/upgrade/Redistribution.t.sol +++ /dev/null @@ -1,89 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity ^0.8.27; - -import "src/test/integration/UpgradeTest.t.sol"; - -contract Integration_Upgrade_Redistribution_Base is UpgradeTest { - AVS avs; - OperatorSet operatorSet; - - User operator; - AllocateParams allocateParams; - SlashingParams slashParams; - - User staker; - IStrategy[] strategies; - IERC20[] tokens; // underlying token for each strategy - uint[] initTokenBalances; - uint[] initDepositShares; - - /// Shared setup: - /// - /// 1. Generate staker, operator, and AVS - /// 2. Staker deposits and delegates to operator - /// 3. AVS creates an operator set containing the strategies held by the staker - /// 4. Operator allocates to operator set - /// 5. Operator registers for operator set - /// 6. Operator is randomly slashed by the operatorSet - function _init() internal override { - (staker, strategies, initTokenBalances) = _newRandomStaker(); - operator = _newRandomOperator_NoAssets(); - (avs,) = _newRandomAVS(); - tokens = _getUnderlyingTokens(strategies); - - // 1. Deposit Into Strategies - staker.depositIntoEigenlayer(strategies, initTokenBalances); - initDepositShares = _calculateExpectedShares(strategies, initTokenBalances); - - // 2. Delegate to an operator - staker.delegateTo(operator); - - // 3. Create an operator set and register an operator. - operatorSet = avs.createOperatorSet(strategies); - - // 4. Operator allocates to operator set - allocateParams = _genAllocation_AllAvailable(operator, operatorSet); - operator.modifyAllocations(allocateParams); - - _rollBlocksForCompleteAllocation(operator, operatorSet, strategies); - - // 5. Operator registers for operator set - operator.registerForOperatorSet(operatorSet); - - // 6. Operator is randomly slashed by the operatorSet - slashParams = _genSlashing_Rand(operator, operatorSet); - avs.slashOperator_PreRedistribution(slashParams); - } -} - -contract Integration_Upgrade_Redistribution is Integration_Upgrade_Redistribution_Base { - function testFuzz_upgrade_burn(uint24 r) public rand(r) { - // 1. Upgrade contracts - _upgradeEigenLayerContracts(); - - // 2. Burn shares - (address[] memory strategiesWithBurnableShares,) = strategyManager.getStrategiesWithBurnableShares(); - for (uint i = 0; i < strategiesWithBurnableShares.length; i++) { - strategyManager.burnShares(IStrategy(strategiesWithBurnableShares[i])); - } - - // Assert that there are no strategies with burned shares - (address[] memory strategiesWithBurnedShares,) = strategyManager.getStrategiesWithBurnableShares(); - assertEq(strategiesWithBurnedShares.length, 0); - } - - function testFuzz_burn_update_operatorSet(uint24 r) public rand(r) { - // 1. Burn shares - (address[] memory strategiesWithBurnableShares,) = strategyManager.getStrategiesWithBurnableShares(); - for (uint i = 0; i < strategiesWithBurnableShares.length; i++) { - strategyManager.burnShares(IStrategy(strategiesWithBurnableShares[i])); - } - - // 2. Upgrade contracts - _upgradeEigenLayerContracts(); - - // Assert that there are no strategies with burned shares - (address[] memory strategiesWithBurnedShares,) = strategyManager.getStrategiesWithBurnableShares(); - assertEq(strategiesWithBurnedShares.length, 0); - } -} diff --git a/src/test/integration/tests/upgrade/SlasherMigration.t.sol b/src/test/integration/tests/upgrade/SlasherMigration.t.sol new file mode 100644 index 0000000000..c70af6c881 --- /dev/null +++ b/src/test/integration/tests/upgrade/SlasherMigration.t.sol @@ -0,0 +1,133 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "src/test/integration/UpgradeTest.t.sol"; + +contract Integration_Upgrade_SlasherMigration_Base is UpgradeTest { + AVS avs; + OperatorSet operatorSet; + + User operator; + AllocateParams allocateParams; + SlashingParams slashParams; + + User staker; + IStrategy[] strategies; + IERC20[] tokens; // underlying token for each strategy + uint[] initTokenBalances; + uint[] initDepositShares; + + // List of all avss/operatorSets to be created, these do not have any stakers/operators/allocations, except for the first one + AVS[] avsList; + OperatorSet[] operatorSetList; + + /// Shared setup: + /// + /// 1. Generate staker, operator, and AVS + /// 2. Staker deposits and delegates to operator + /// 3. AVS creates an operator set containing the strategies held by the staker + /// 4. Operator allocates to operator set + /// 5. Operator registers for operator set + /// 6. Create 6 more avss/operatorSets + + function _init() internal override { + (staker, strategies, initTokenBalances) = _newRandomStaker(); + operator = _newRandomOperator_NoAssets(); + (avs,) = _newRandomAVS_v1CreateSet(); + tokens = _getUnderlyingTokens(strategies); + avsList.push(avs); + + // 1. Deposit Into Strategies + staker.depositIntoEigenlayer(strategies, initTokenBalances); + initDepositShares = _calculateExpectedShares(strategies, initTokenBalances); + + // 2. Delegate to an operator + staker.delegateTo(operator); + + // 3. Create an operator set with strategies and register an operator. + operatorSet = avs.createOperatorSet_v1(strategies); + operatorSetList.push(operatorSet); + // Roll forward to after the allocation delay completes. We need to roll forward since the deploy version on mainnet + // still has to wait a `ALLOCATION_CONFIGURATION_DELAY` to allocate slashable stake. + _rollForward_AllocationConfigurationDelay(); + + // 4. Operator allocates to operator set + allocateParams = _genAllocation_AllAvailable(operator, operatorSet); + operator.modifyAllocations(allocateParams); + + _rollBlocksForCompleteAllocation(operator, operatorSet, strategies); + + // 5. Operator registers for operator set + operator.registerForOperatorSet(operatorSet); + + // 6. Create 5 more avss/operatorSets (pre-upgrade) + for (uint i = 0; i < 5; i++) { + (AVS newAVS, OperatorSet[] memory newOperatorSets) = _newRandomAVS_v1CreateSet(); + avsList.push(newAVS); + for (uint j = 0; j < newOperatorSets.length; j++) { + operatorSetList.push(newOperatorSets[j]); + } + } + } +} + +contract Integration_Upgrade_SlasherMigration is Integration_Upgrade_SlasherMigration_Base { + function testFuzz_upgrade_migrate(uint24 r) public rand(r) { + // 1. Upgrade contracts + _upgradeEigenLayerContracts(); + + // Expect all slashers are 0 prior to migration + for (uint i = 0; i < operatorSetList.length; i++) { + assertEq(allocationManager.getSlasher(operatorSetList[i]), address(0), "slasher should be the 0 address"); + } + + // 2. Migrate slashers + allocationManager.migrateSlashers(operatorSetList); + + // Check that the slashers are set to the AVS + for (uint i = 0; i < operatorSetList.length; i++) { + assertEq(allocationManager.getSlasher(operatorSetList[i]), address(operatorSetList[i].avs), "slasher should be the AVS"); + } + } + + function testFuzz_setAppointee_upgrade_migrate(uint24 r) public rand(r) { + // 1. Set appointee for the slasher for the first operatorSet + address appointee = address(0x1); + avsList[0].addAppointee(appointee, address(allocationManager), allocationManager.slashOperator.selector); + + // 2. Upgrade contracts + _upgradeEigenLayerContracts(); + + // 3. Migrate slashers + allocationManager.migrateSlashers(operatorSetList); + + // Check the slashers are properly set + for (uint i = 0; i < operatorSetList.length; i++) { + OperatorSet memory operatorSet = operatorSetList[i]; + if (operatorSet.avs == address(avsList[0])) { + assertEq(allocationManager.getSlasher(operatorSet), appointee, "slasher should be the appointee"); + } else { + assertEq(allocationManager.getSlasher(operatorSet), address(operatorSet.avs), "slasher should be the AVS"); + } + } + } + + function testFuzz_upgrade_migrate_updateSlasher_slash(uint24 r) public rand(r) { + // 1. Upgrade contracts + _upgradeEigenLayerContracts(); + + // 2. Migrate slashers + allocationManager.migrateSlashers(operatorSetList); + + // 3. Update the slasher + address slasher = address(0x2); + avs.updateSlasher(operatorSet.id, slasher); + _rollForward_AllocationConfigurationDelay(); + + // 4. Slash the operator + slashParams = _genSlashing_Rand(operator, operatorSet); + cheats.prank(slasher); + (uint slashId,) = allocationManager.slashOperator(address(avs), slashParams); + check_Base_Slashing_State(operator, allocateParams, slashParams, slashId); + } +} diff --git a/src/test/integration/tests/upgrade/ZeroRegistrationDelay.t.sol b/src/test/integration/tests/upgrade/ZeroRegistrationDelay.t.sol new file mode 100644 index 0000000000..5046c23df0 --- /dev/null +++ b/src/test/integration/tests/upgrade/ZeroRegistrationDelay.t.sol @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "src/test/integration/UpgradeTest.t.sol"; + +contract Integration_Upgrade_ZeroRegistrationDelay is UpgradeTest { + User operator; + User operator2; + + AVS avs; + IStrategy[] strategies; + OperatorSet operatorSet; + + function _init() internal override { + (, strategies,) = _newRandomStaker(); + (avs,) = _newRandomAVS_v1CreateSet(); + operatorSet = avs.createOperatorSet_v1(strategies); + } + + function testFuzz_register_upgrade_registerNew(uint24 r) public rand(r) { + // 1. Register operator + operator = _newRandomOperator_NoAssets(); + + (bool isSetOperator1,) = allocationManager.getAllocationDelay(address(operator)); + // The delay should not be set since we adjusted `_newRandomOperator` to roll forward only 1 block after registration + assertFalse(isSetOperator1, "isSet should be false"); + + // 2. Upgrade contracts + _upgradeEigenLayerContracts(); + + // 3. Register new operator + operator2 = _newRandomOperator_NoAssets(); + (bool isSetOperator2,) = allocationManager.getAllocationDelay(address(operator2)); + + // The delay should be set immediately + assertTrue(isSetOperator2, "isSet should be true"); + + // The delay for operator1 should still not be set + (isSetOperator1,) = allocationManager.getAllocationDelay(address(operator)); + assertFalse(isSetOperator1, "isSet should be false"); + + // 4. Assert that operator2 is set after the configuration delay + rollForward({blocks: ALLOCATION_CONFIGURATION_DELAY + 1}); + (isSetOperator1,) = allocationManager.getAllocationDelay(address(operator)); + assertTrue(isSetOperator1, "isSet should be true"); + } +} diff --git a/src/test/integration/users/AVS.t.sol b/src/test/integration/users/AVS.t.sol index 1d78207fdd..115bfb9a96 100644 --- a/src/test/integration/users/AVS.t.sol +++ b/src/test/integration/users/AVS.t.sol @@ -80,7 +80,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { print.method("updateAVSMetadataURI"); console.log("Setting AVS metadata URI to: %s", uri); - _tryPrankAppointee_AllocationManager(IAllocationManager.updateAVSMetadataURI.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.updateAVSMetadataURI.selector); allocationManager.updateAVSMetadataURI(address(this), uri); print.gasUsed(); @@ -89,6 +89,26 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { function createOperatorSets(IStrategy[][] memory strategies) public createSnapshot returns (OperatorSet[] memory operatorSets) { print.method("createOperatorSets"); + uint len = strategies.length; + CreateSetParamsV2[] memory p = new CreateSetParamsV2[](len); + operatorSets = new OperatorSet[](len); + + for (uint i; i < len; ++i) { + p[i] = CreateSetParamsV2({operatorSetId: totalOperatorSets++, strategies: strategies[i], slasher: address(this)}); + + operatorSets[i] = OperatorSet(address(this), p[i].operatorSetId); + } + + print.createOperatorSets(p); + + allocationManager.createOperatorSets(address(this), p); + + print.gasUsed(); + } + + function createOperatorSets_v1(IStrategy[][] memory strategies) public createSnapshot returns (OperatorSet[] memory operatorSets) { + print.method("createOperatorSets_v1"); + uint len = strategies.length; CreateSetParams[] memory p = new CreateSetParams[](len); operatorSets = new OperatorSet[](len); @@ -135,6 +155,21 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { operatorSet = OperatorSet(address(this), totalOperatorSets++); + CreateSetParamsV2[] memory p = + CreateSetParamsV2({operatorSetId: operatorSet.id, strategies: strategies, slasher: address(this)}).toArray(); + + print.createOperatorSets(p); + allocationManager.createOperatorSets(address(this), p); + print.gasUsed(); + } + + /// @dev Creates an operator set with the *soon to be deprecated* `createOperatorSets` method without a slasher + /// @dev This method is only used by the slasher migration test + function createOperatorSet_v1(IStrategy[] memory strategies) public createSnapshot returns (OperatorSet memory operatorSet) { + print.method("createOperatorSet_v1"); + + operatorSet = OperatorSet(address(this), totalOperatorSets++); + CreateSetParams[] memory p = CreateSetParams({operatorSetId: operatorSet.id, strategies: strategies}).toArray(); print.createOperatorSets(p); @@ -151,7 +186,8 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { operatorSet = OperatorSet(address(this), totalOperatorSets++); - CreateSetParams[] memory p = CreateSetParams({operatorSetId: operatorSet.id, strategies: strategies}).toArray(); + CreateSetParamsV2[] memory p = + CreateSetParamsV2({operatorSetId: operatorSet.id, strategies: strategies, slasher: address(this)}).toArray(); print.createOperatorSets(p); allocationManager.createRedistributingOperatorSets(address(this), p, redistributionRecipient.toArray()); @@ -185,7 +221,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { ) ); } - _tryPrankAppointee_AllocationManager(IAllocationManager.slashOperator.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.slashOperator.selector); (slashId, shares) = allocationManager.slashOperator(address(this), params); print.gasUsed(); } @@ -222,7 +258,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { ); } - _tryPrankAppointee_AllocationManager(IAllocationManager.slashOperator.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.slashOperator.selector); IAllocationManager_PreRedistribution(address(allocationManager)).slashOperator(address(this), slashParams); print.gasUsed(); @@ -261,7 +297,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { ); } - _tryPrankAppointee_AllocationManager(IAllocationManager.slashOperator.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.slashOperator.selector); (slashId, shares) = allocationManager.slashOperator(address(this), p); print.gasUsed(); } @@ -287,7 +323,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { DeregisterParams memory p = DeregisterParams({operator: address(operator), avs: address(this), operatorSetIds: operatorSetIds}); print.deregisterFromOperatorSets(p); - _tryPrankAppointee_AllocationManager(IAllocationManager.deregisterFromOperatorSets.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.deregisterFromOperatorSets.selector); allocationManager.deregisterFromOperatorSets(p); print.gasUsed(); } @@ -295,7 +331,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { function setAVSRegistrar(IAVSRegistrar registrar) public createSnapshot { print.method("setAVSRegistrar"); console.log("Setting AVS registrar to: %s", address(registrar)); - _tryPrankAppointee_AllocationManager(IAllocationManager.setAVSRegistrar.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.setAVSRegistrar.selector); allocationManager.setAVSRegistrar(address(this), registrar); print.gasUsed(); } @@ -308,7 +344,7 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { for (uint i; i < strategies.length; ++i) { console.log(" strategy: %s", address(strategies[i])); } - _tryPrankAppointee_AllocationManager(IAllocationManager.addStrategiesToOperatorSet.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.addStrategiesToOperatorSet.selector); allocationManager.addStrategiesToOperatorSet(address(this), operatorSetId, strategies); print.gasUsed(); } @@ -321,11 +357,30 @@ contract AVS is Logger, IAllocationManagerTypes, IAVSRegistrar { for (uint i; i < strategies.length; ++i) { console.log(" strategy: %s", address(strategies[i])); } - _tryPrankAppointee_AllocationManager(IAllocationManager.removeStrategiesFromOperatorSet.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.removeStrategiesFromOperatorSet.selector); allocationManager.removeStrategiesFromOperatorSet(address(this), operatorSetId, strategies); print.gasUsed(); } + function updateSlasher(uint32 operatorSetId, address slasher) public createSnapshot { + print.method("updateSlasher"); + + console.log("Updating slasher for operator set: %d to %s", operatorSetId, address(slasher)); + + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.updateSlasher.selector); + allocationManager.updateSlasher(OperatorSet(address(this), operatorSetId), slasher); + print.gasUsed(); + } + + function addAppointee(address appointee, address target, bytes4 selector) public createSnapshot { + print.method("addAppointee"); + + console.log("Adding appointee: %s for %s", appointee, target); + + permissionController.setAppointee(address(this), appointee, target, selector); + print.gasUsed(); + } + /// ----------------------------------------------------------------------- /// IAVSRegistrar /// ----------------------------------------------------------------------- diff --git a/src/test/integration/users/User.t.sol b/src/test/integration/users/User.t.sol index 579c39fe72..0136b9c845 100644 --- a/src/test/integration/users/User.t.sol +++ b/src/test/integration/users/User.t.sol @@ -21,7 +21,7 @@ import "src/test/utils/Logger.t.sol"; import "src/test/utils/ArrayLib.sol"; interface IUserDeployer { - function allocationManager() external view returns (AllocationManager); + function allocationManager() external view returns (IAllocationManager); function delegationManager() external view returns (DelegationManager); function permissionController() external view returns (PermissionController); function strategyManager() external view returns (StrategyManager); @@ -104,7 +104,7 @@ contract User is Logger, TypeImporter { ) ); - _tryPrankAppointee_AllocationManager(IAllocationManager.modifyAllocations.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.modifyAllocations.selector); allocationManager().modifyAllocations(address(this), params.toArray()); print.gasUsed(); } @@ -132,7 +132,7 @@ contract User is Logger, TypeImporter { string.concat("{avs: ", Logger(operatorSet.avs).NAME_COLORED(), ", operatorSetId: ", cheats.toString(operatorSet.id), "}") ); - _tryPrankAppointee_AllocationManager(IAllocationManager.registerForOperatorSets.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.registerForOperatorSets.selector); allocationManager().registerForOperatorSets( address(this), RegisterParams({avs: operatorSet.avs, operatorSetIds: operatorSet.id.toArrayU32(), data: ""}) ); @@ -145,7 +145,7 @@ contract User is Logger, TypeImporter { string.concat("{avs: ", Logger(operatorSet.avs).NAME_COLORED(), ", operatorSetId: ", cheats.toString(operatorSet.id), "}") ); - _tryPrankAppointee_AllocationManager(IAllocationManager.deregisterFromOperatorSets.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.deregisterFromOperatorSets.selector); allocationManager().deregisterFromOperatorSets( DeregisterParams({operator: address(this), avs: operatorSet.avs, operatorSetIds: operatorSet.id.toArrayU32()}) ); @@ -193,7 +193,7 @@ contract User is Logger, TypeImporter { function setAllocationDelay(uint32 delay) public virtual createSnapshot { print.method("setAllocationDelay"); - _tryPrankAppointee_AllocationManager(IAllocationManager.setAllocationDelay.selector); + _tryPrankAppointee_AllocationManager(IAllocationManagerActions.setAllocationDelay.selector); allocationManager().setAllocationDelay(address(this), delay); print.gasUsed(); @@ -613,8 +613,8 @@ contract User is Logger, TypeImporter { /// View Methods /// ----------------------------------------------------------------------- - function allocationManager() public view returns (AllocationManager) { - return AllocationManager(address(delegationManager.allocationManager())); + function allocationManager() public view returns (IAllocationManager) { + return IAllocationManager(address(delegationManager.allocationManager())); } function permissionController() public view returns (PermissionController) { diff --git a/src/test/unit/AllocationManagerUnit.t.sol b/src/test/unit/AllocationManagerUnit.t.sol index 173668045d..ba90ff70e9 100644 --- a/src/test/unit/AllocationManagerUnit.t.sol +++ b/src/test/unit/AllocationManagerUnit.t.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.27; import "src/test/harnesses/AllocationManagerHarness.sol"; +import "src/contracts/core/AllocationManagerView.sol"; import "src/test/utils/EigenLayerUnitTestSetup.sol"; import "src/test/mocks/MockAVSRegistrar.sol"; @@ -35,7 +36,7 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag /// Mocks /// ----------------------------------------------------------------------- - AllocationManagerHarness allocationManager; + IAllocationManager allocationManager; ERC20PresetFixedSupply tokenMock; StrategyBase strategyMock; @@ -66,7 +67,7 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag strategyMock = StrategyBase( address( new TransparentUpgradeableProxy( - address(new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry, "9.9.9")), + address(new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry)), address(eigenLayerProxyAdmin), abi.encodeWithSelector(StrategyBase.initialize.selector, tokenMock) ) @@ -91,13 +92,17 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag function _initializeAllocationManager(IPauserRegistry _pauserRegistry, uint _initialPausedStatus) internal - returns (AllocationManagerHarness) + returns (IAllocationManager) { - return allocationManager = AllocationManagerHarness( + IAllocationManagerView allocationManagerView = new AllocationManagerView( + IDelegationManager(address(delegationManagerMock)), eigenStrategy, DEALLOCATION_DELAY, ALLOCATION_CONFIGURATION_DELAY + ); + return allocationManager = IAllocationManager( address( new TransparentUpgradeableProxy( address( new AllocationManagerHarness( + allocationManagerView, IDelegationManager(address(delegationManagerMock)), eigenStrategy, _pauserRegistry, @@ -126,16 +131,17 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag function _createOperatorSet(OperatorSet memory operatorSet, IStrategy[] memory strategies) internal returns (OperatorSet memory) { cheats.prank(operatorSet.avs); allocationManager.createOperatorSets( - operatorSet.avs, CreateSetParams({operatorSetId: operatorSet.id, strategies: strategies}).toArray() + operatorSet.avs, CreateSetParamsV2({operatorSetId: operatorSet.id, strategies: strategies, slasher: operatorSet.avs}).toArray() ); return operatorSet; } function _createOperatorSets(OperatorSet[] memory operatorSets, IStrategy[] memory strategies) internal { - CreateSetParams[] memory createSetParams = new CreateSetParams[](operatorSets.length); + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](operatorSets.length); for (uint i; i < operatorSets.length; ++i) { - createSetParams[i] = CreateSetParams({operatorSetId: operatorSets[i].id, strategies: strategies}); + createSetParams[i] = + CreateSetParamsV2({operatorSetId: operatorSets[i].id, strategies: strategies, slasher: operatorSets[i].avs}); } cheats.prank(operatorSets[0].avs); @@ -150,7 +156,7 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag cheats.prank(operatorSet.avs); allocationManager.createRedistributingOperatorSets( operatorSet.avs, - CreateSetParams({operatorSetId: operatorSet.id, strategies: strategies}).toArray(), + CreateSetParamsV2({operatorSetId: operatorSet.id, strategies: strategies, slasher: operatorSet.avs}).toArray(), redistributionRecipient.toArray() ); return operatorSet; @@ -161,10 +167,11 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag IStrategy[] memory strategies, address[] memory redistributionRecipients ) internal { - CreateSetParams[] memory createSetParams = new CreateSetParams[](operatorSets.length); + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](operatorSets.length); for (uint i; i < operatorSets.length; ++i) { - createSetParams[i] = CreateSetParams({operatorSetId: operatorSets[i].id, strategies: strategies}); + createSetParams[i] = + CreateSetParamsV2({operatorSetId: operatorSets[i].id, strategies: strategies, slasher: operatorSets[i].avs}); } cheats.prank(operatorSets[0].avs); @@ -285,7 +292,7 @@ contract AllocationManagerUnitTests is EigenLayerUnitTestSetup, IAllocationManag uint32 lastEffectBlock = 0; for (uint i = 0; i < numDeallocations; ++i) { - bytes32 operatorSetKey = allocationManager.deallocationQueueAtIndex(operator, strategy, i); + bytes32 operatorSetKey = AllocationManagerHarness(address(allocationManager)).deallocationQueueAtIndex(operator, strategy, i); Allocation memory allocation = allocationManager.getAllocation(operator, OperatorSetLib.decode(operatorSetKey), strategy); assertTrue(lastEffectBlock <= allocation.effectBlock, "Deallocation queue is not in ascending order of effectBlocks"); @@ -553,7 +560,7 @@ contract AllocationManagerUnitTests_Initialization_Setters is AllocationManagerU // Deploy the contract with the expected initial state. uint initialPausedStatus = r.Uint256(); - AllocationManager alm = _initializeAllocationManager(expectedPauserRegistry, initialPausedStatus); + IAllocationManager alm = _initializeAllocationManager(expectedPauserRegistry, initialPausedStatus); // Assert that the contract can only be initialized once. vm.expectRevert("Initializable: contract is already initialized"); @@ -1779,6 +1786,63 @@ contract AllocationManagerUnitTests_SlashOperator is AllocationManagerUnitTests assertEq(0, allocationManager.getAllocatableMagnitude(defaultOperator, strategyMock), "Allocatable magnitude should be 0"); assertEq(0, allocationManager.getMaxMagnitude(defaultOperator, strategyMock), "Max magnitude should be 0"); } + + /** + * @notice Tests that an AVS can update the slasher, and it can slash once the slasher is active + */ + function test_slash_updateSlasher_slashAgain() public { + // Allocate all magnitude + cheats.prank(defaultOperator); + allocationManager.modifyAllocations(defaultOperator, _newAllocateParams(defaultOperatorSet, WAD)); + cheats.roll(block.number + DEFAULT_OPERATOR_ALLOCATION_DELAY); + + SlashingParams memory slashingParams = SlashingParams({ + operator: defaultOperator, + operatorSetId: defaultOperatorSet.id, + strategies: defaultStrategies, + wadsToSlash: 5e17.toArrayU256(), + description: "test" + }); + + // Slash the operator for half + cheats.prank(defaultAVS); + allocationManager.slashOperator(defaultAVS, slashingParams); + + // Update the slasher + address appointee1 = address(0x1); + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, appointee1); + + // Warp to just before the effect block of the slasher - fail to slash + cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY); + cheats.prank(appointee1); + cheats.expectRevert(InvalidCaller.selector); + allocationManager.slashOperator(defaultAVS, slashingParams); + + // Warp to the effect block of the slasher + cheats.roll(block.number + 1); + + // Slash the operator again for half + cheats.prank(appointee1); + allocationManager.slashOperator(defaultAVS, slashingParams); + + // Sanity checks + _checkAllocationStorage({ + operator: defaultOperator, + operatorSet: defaultOperatorSet, + strategy: strategyMock, + expectedAllocation: Allocation({currentMagnitude: 25e16, pendingDiff: 0, effectBlock: 0}), + expectedMagnitudes: Magnitudes({encumbered: 25e16, max: 25e16, allocatable: 0}) + }); + + // Slashable stake should include first allocation and slashed magnitude + _checkSlashableStake({ + operatorSet: defaultOperatorSet, + operator: defaultOperator, + strategies: defaultStrategies, + expectedSlashableStake: 25e16 + }); + } } contract AllocationManagerUnitTests_ModifyAllocations is AllocationManagerUnitTests { @@ -1786,6 +1850,9 @@ contract AllocationManagerUnitTests_ModifyAllocations is AllocationManagerUnitTe using OperatorSetLib for *; using SlashingLib for *; + /// @dev Thrown when the caller is not allowed to call a function on behalf of an account. + error InvalidPermissions(); + function test_revert_paused() public { allocationManager.pause(2 ** PAUSED_MODIFY_ALLOCATIONS); cheats.expectRevert(IPausable.CurrentlyPaused.selector); @@ -1794,7 +1861,7 @@ contract AllocationManagerUnitTests_ModifyAllocations is AllocationManagerUnitTe function test_revert_InvalidCaller() public { address invalidOperator = address(0x2); - cheats.expectRevert(InvalidCaller.selector); + cheats.expectRevert(InvalidPermissions.selector); allocationManager.modifyAllocations(invalidOperator, new AllocateParams[](0)); } @@ -3263,6 +3330,8 @@ contract AllocationManagerUnitTests_SetAllocationDelay is AllocationManagerUnitT /// ----------------------------------------------------------------------- /// setAllocationDelay() + getAllocationDelay() /// ----------------------------------------------------------------------- + /// @dev Thrown when the caller is not allowed to call a function on behalf of an account. + error InvalidPermissions(); address operatorToSet = address(0x1); @@ -3279,7 +3348,7 @@ contract AllocationManagerUnitTests_SetAllocationDelay is AllocationManagerUnitT } function test_revert_callerNotAuthorized() public { - cheats.expectRevert(InvalidCaller.selector); + cheats.expectRevert(InvalidPermissions.selector); allocationManager.setAllocationDelay(operatorToSet, 1); } @@ -3388,8 +3457,7 @@ contract AllocationManagerUnitTests_SetAllocationDelay is AllocationManagerUnitT cheats.prank(address(delegationManagerMock)); allocationManager.setAllocationDelay(operatorToSet, delay); - // Warp to effect block - cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + // The allocation delay is set immediately (bool isSet, uint32 returnedDelay) = allocationManager.getAllocationDelay(operatorToSet); assertTrue(isSet, "isSet should be set"); assertEq(delay, returnedDelay, "delay not set"); @@ -3772,6 +3840,16 @@ contract AllocationManagerUnitTests_createOperatorSets is AllocationManagerUnitT allocationManager.createOperatorSets(avs, CreateSetParams(defaultOperatorSet.id, defaultStrategies).toArray()); } + function testRevert_createOperatorSets_ZeroSlasherAddress() public { + address avs = address(0); + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.createOperatorSets(avs, CreateSetParams(defaultOperatorSet.id, defaultStrategies).toArray()); + } + function testFuzz_createOperatorSets_Correctness(Randomness r) public rand(r) { address avs = r.Address(); uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS); @@ -3791,6 +3869,80 @@ contract AllocationManagerUnitTests_createOperatorSets is AllocationManagerUnitT cheats.expectEmit(true, true, true, true, address(allocationManager)); emit StrategyAddedToOperatorSet(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].strategies[j]); } + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(OperatorSet(avs, createSetParams[i].operatorSetId), avs, uint32(block.number)); + } + + cheats.prank(avs); + allocationManager.createOperatorSets(avs, createSetParams); + + for (uint k; k < numOpSets; ++k) { + OperatorSet memory opSet = OperatorSet(avs, createSetParams[k].operatorSetId); + assertTrue(allocationManager.isOperatorSet(opSet), "should be operator set"); + IStrategy[] memory strategiesInSet = allocationManager.getStrategiesInOperatorSet(opSet); + assertEq(strategiesInSet.length, numStrategies, "strategiesInSet length should be numStrategies"); + for (uint l; l < numStrategies; ++l) { + assertTrue( + allocationManager.getStrategiesInOperatorSet(opSet)[l] == createSetParams[k].strategies[l], "should be strat of set" + ); + } + assertFalse(allocationManager.isRedistributingOperatorSet(opSet), "should not be redistributing operator set"); + assertEq(allocationManager.getRedistributionRecipient(opSet), DEFAULT_BURN_ADDRESS, "recipient should be default burn address"); + assertEq(allocationManager.getSlasher(opSet), avs, "should be slasher of set"); + } + + assertEq(createSetParams.length, allocationManager.getOperatorSetCount(avs), "should be correct number of sets"); + } +} + +contract AllocationManagerUnitTests_createOperatorSets_V2 is AllocationManagerUnitTests { + using ArrayLib for *; + + function testRevert_createOperatorSets_InvalidOperatorSet() public { + cheats.prank(defaultAVS); + cheats.expectRevert(InvalidOperatorSet.selector); + allocationManager.createOperatorSets(defaultAVS, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, defaultAVS).toArray()); + } + + function testRevert_createOperatorSets_NonexistentAVSMetadata(Randomness r) public rand(r) { + address avs = r.Address(); + cheats.expectRevert(NonexistentAVSMetadata.selector); + cheats.prank(avs); + allocationManager.createOperatorSets(avs, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, defaultAVS).toArray()); + } + + function testRevert_createOperatorSets_ZeroSlasherAddress(Randomness r) public rand(r) { + address avs = r.Address(); + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.createOperatorSets(avs, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, address(0)).toArray()); + } + + function testFuzz_createOperatorSets_Correctness(Randomness r) public rand(r) { + address avs = r.Address(); + uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS); + uint numStrategies = r.Uint256(1, FUZZ_MAX_STRATS); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](numOpSets); + + for (uint i; i < numOpSets; ++i) { + createSetParams[i].operatorSetId = r.Uint32(1, type(uint32).max); + createSetParams[i].strategies = r.StrategyArray(numStrategies); + createSetParams[i].slasher = r.Address(); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit OperatorSetCreated(OperatorSet(avs, createSetParams[i].operatorSetId)); + for (uint j; j < numStrategies; ++j) { + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit StrategyAddedToOperatorSet(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].strategies[j]); + } + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].slasher, uint32(block.number)); } cheats.prank(avs); @@ -3808,6 +3960,7 @@ contract AllocationManagerUnitTests_createOperatorSets is AllocationManagerUnitT } assertFalse(allocationManager.isRedistributingOperatorSet(opSet), "should not be redistributing operator set"); assertEq(allocationManager.getRedistributionRecipient(opSet), DEFAULT_BURN_ADDRESS, "recipient should be default burn address"); + assertEq(allocationManager.getSlasher(opSet), createSetParams[k].slasher, "should be slasher of set"); } assertEq(createSetParams.length, allocationManager.getOperatorSetCount(avs), "should be correct number of sets"); @@ -3845,7 +3998,7 @@ contract AllocationManagerUnitTests_createRedistributingOperatorSets is Allocati ); } - function testRevert_createRedistributingOperatorSets_ZeroAddress(Randomness r) public rand(r) { + function testRevert_createRedistributingOperatorSets_ZeroRedistributionAddress(Randomness r) public rand(r) { address avs = address(0x12345); address[] memory redistributionRecipients = new address[](1); redistributionRecipients[0] = address(0); @@ -3875,6 +4028,22 @@ contract AllocationManagerUnitTests_createRedistributingOperatorSets is Allocati ); } + /// @dev We prank address(0) as the avs to test the zero slasher address + function testRevert_createRedistributingOperatorSets_ZeroSlasherAddress() public { + address avs = address(0); + address[] memory redistributionRecipients = new address[](1); + redistributionRecipients[0] = address(0); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.createRedistributingOperatorSets( + avs, CreateSetParams(defaultOperatorSet.id, defaultStrategies).toArray(), redistributionRecipients + ); + } + function testFuzz_createRedistributingOperatorSets_Correctness(Randomness r) public rand(r) { address avs = r.Address(); uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS); @@ -3899,6 +4068,142 @@ contract AllocationManagerUnitTests_createRedistributingOperatorSets is Allocati cheats.expectEmit(true, true, true, true, address(allocationManager)); emit StrategyAddedToOperatorSet(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].strategies[j]); } + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(OperatorSet(avs, createSetParams[i].operatorSetId), avs, uint32(block.number)); + } + + cheats.prank(avs); + allocationManager.createRedistributingOperatorSets(avs, createSetParams, redistributionRecipients); + + for (uint k; k < numOpSets; ++k) { + OperatorSet memory opSet = OperatorSet(avs, createSetParams[k].operatorSetId); + assertTrue(allocationManager.isOperatorSet(opSet), "should be operator set"); + assertTrue(allocationManager.isRedistributingOperatorSet(opSet), "should be redistributing operator set"); + assertEq( + allocationManager.getRedistributionRecipient(opSet), + redistributionRecipients[k], + "should have correct redistribution recipient" + ); + + IStrategy[] memory strategiesInSet = allocationManager.getStrategiesInOperatorSet(opSet); + assertEq(strategiesInSet.length, numStrategies, "strategiesInSet length should be numStrategies"); + for (uint l; l < numStrategies; ++l) { + assertTrue( + allocationManager.getStrategiesInOperatorSet(opSet)[l] == createSetParams[k].strategies[l], "should be strat of set" + ); + } + + assertEq(allocationManager.getSlasher(opSet), avs, "should be slasher of set"); + } + + assertEq(createSetParams.length, allocationManager.getOperatorSetCount(avs), "should be correct number of sets"); + } +} + +contract AllocationManagerUnitTests_createRedistributingOperatorSetsV2 is AllocationManagerUnitTests { + using ArrayLib for *; + + function testRevert_createRedistributingOperatorSets_InvalidOperatorSet() public { + cheats.prank(defaultAVS); + cheats.expectRevert(InvalidOperatorSet.selector); + allocationManager.createRedistributingOperatorSets( + defaultAVS, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, defaultAVS).toArray(), address(this).toArray() + ); + } + + function testRevert_createRedistributingOperatorSets_EigenStrategyInRedistributingSet() public { + cheats.prank(defaultAVS); + cheats.expectRevert(InvalidStrategy.selector); + allocationManager.createRedistributingOperatorSets( + defaultAVS, + CreateSetParamsV2(defaultOperatorSet.id + 1, IStrategy(address(eigenStrategy)).toArray(), defaultAVS).toArray(), + address(this).toArray() + ); + } + + function testRevert_createRedistributingOperatorSets_NonexistentAVSMetadata(Randomness r) public rand(r) { + address avs = r.Address(); + address redistributionRecipient = r.Address(); + cheats.expectRevert(NonexistentAVSMetadata.selector); + cheats.prank(avs); + allocationManager.createRedistributingOperatorSets( + avs, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, defaultAVS).toArray(), redistributionRecipient.toArray() + ); + } + + function testRevert_createRedistributingOperatorSets_ZeroRedistributionAddress(Randomness r) public rand(r) { + address avs = address(0x12345); + address[] memory redistributionRecipients = new address[](1); + redistributionRecipients[0] = address(0); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.createRedistributingOperatorSets( + avs, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, defaultAVS).toArray(), redistributionRecipients + ); + } + + function testRevert_createRedistributingOperatorSets_InvalidRedistributionRecipient(Randomness r) public rand(r) { + address avs = r.Address(); + address[] memory redistributionRecipients = new address[](1); + redistributionRecipients[0] = DEFAULT_BURN_ADDRESS; + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(InvalidRedistributionRecipient.selector); + allocationManager.createRedistributingOperatorSets( + avs, CreateSetParams(defaultOperatorSet.id, defaultStrategies).toArray(), redistributionRecipients + ); + } + + /// @dev We prank address(0) as the avs to test the zero slasher address + function testRevert_createRedistributingOperatorSets_ZeroSlasherAddress() public { + address avs = address(0); + address[] memory redistributionRecipients = new address[](1); + redistributionRecipients[0] = address(0); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + cheats.prank(avs); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.createRedistributingOperatorSets( + avs, CreateSetParamsV2(defaultOperatorSet.id, defaultStrategies, address(0)).toArray(), redistributionRecipients + ); + } + + function testFuzz_createRedistributingOperatorSets_Correctness(Randomness r) public rand(r) { + address avs = r.Address(); + uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS); + uint numStrategies = r.Uint256(1, FUZZ_MAX_STRATS); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](numOpSets); + address[] memory redistributionRecipients = new address[](numOpSets); + + for (uint i; i < numOpSets; ++i) { + createSetParams[i].operatorSetId = r.Uint32(1, type(uint32).max); + createSetParams[i].strategies = r.StrategyArray(numStrategies); + createSetParams[i].slasher = r.Address(); + redistributionRecipients[i] = r.Address(); + + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit OperatorSetCreated(OperatorSet(avs, createSetParams[i].operatorSetId)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit RedistributionAddressSet(OperatorSet(avs, createSetParams[i].operatorSetId), redistributionRecipients[i]); + for (uint j; j < numStrategies; ++j) { + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit StrategyAddedToOperatorSet(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].strategies[j]); + } + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(OperatorSet(avs, createSetParams[i].operatorSetId), createSetParams[i].slasher, uint32(block.number)); } cheats.prank(avs); @@ -3921,12 +4226,359 @@ contract AllocationManagerUnitTests_createRedistributingOperatorSets is Allocati allocationManager.getStrategiesInOperatorSet(opSet)[l] == createSetParams[k].strategies[l], "should be strat of set" ); } + + assertEq(allocationManager.getSlasher(opSet), createSetParams[k].slasher, "should be slasher of set"); } assertEq(createSetParams.length, allocationManager.getOperatorSetCount(avs), "should be correct number of sets"); } } +contract AllocationManagerUnitTests_updateSlasher is AllocationManagerUnitTests, IPermissionControllerErrors { + /// ----------------------------------------------------------------------- + /// updateSlasher() + getSlasher() + getPendingSlasher() + /// ----------------------------------------------------------------------- + + /// @dev Thrown when the caller is not allowed to call a function on behalf of an account. + error InvalidPermissions(); + + function setUp() public override { + AllocationManagerUnitTests.setUp(); + } + + function test_revert_callerNotAuthorized(Randomness r) public rand(r) { + address caller = r.Address(); + cheats.assume(caller != defaultAVS); + + cheats.prank(caller); + cheats.expectRevert(InvalidPermissions.selector); + allocationManager.updateSlasher(defaultOperatorSet, r.Address()); + } + + function test_revert_invalidOperatorSet() public { + cheats.prank(defaultAVS); + cheats.expectRevert(InvalidOperatorSet.selector); + allocationManager.updateSlasher(OperatorSet(defaultAVS, 1), defaultAVS); + } + + function test_revert_slasherNotSet() public { + cheats.prank(defaultAVS); + + // Zero out the slasher address + AllocationManagerHarness(address(allocationManager)).setSlasherToZero(defaultOperatorSet); + + cheats.prank(defaultAVS); + cheats.expectRevert(SlasherNotSet.selector); + allocationManager.updateSlasher(defaultOperatorSet, defaultAVS); + } + + function test_revert_slasherZeroAddress() public { + cheats.prank(defaultAVS); + cheats.expectRevert(IPausable.InputAddressZero.selector); + allocationManager.updateSlasher(defaultOperatorSet, address(0)); + } + + function test_slasher_boundary(Randomness r) public rand(r) { + address slasher = r.Address(); + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, slasher); + uint32 effectBlock = uint32(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + + // Warp to the allocation config delay - the slasher should still be the defaultAVS and the pending slasher should be the new slasher + cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY); + assertEq(allocationManager.getSlasher(defaultOperatorSet), defaultAVS, "slasher should still be the defaultAVS"); + (address returnedPendingSlasher, uint32 returnedEffectBlock) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(returnedPendingSlasher, slasher, "pending slasher should be the new slasher"); + assertEq(returnedEffectBlock, effectBlock, "effect block should be the allocation config delay"); + + // Warp to the next block - the slasher should be the new slasher and the pending slasher should be the 0 address + cheats.roll(block.number + 1); + assertEq(allocationManager.getSlasher(defaultOperatorSet), slasher, "slasher should be the new slasher"); + (returnedPendingSlasher, returnedEffectBlock) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(returnedPendingSlasher, address(0), "pending slasher should be the 0 address"); + assertEq(returnedEffectBlock, 0, "effect block should be 0"); + } + + function testFuzz_updateSlasher(Randomness r) public rand(r) { + address slasher = r.Address(); + + // Set slasher + cheats.expectEmit(true, true, true, true, address(allocationManager)); + uint32 effectBlock = uint32(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + emit SlasherUpdated(defaultOperatorSet, slasher, effectBlock); + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, slasher); + + // Check values after set + (address returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, defaultAVS, "slasher should still be the defaultAVS"); + (address returnedPendingSlasher, uint32 returnedEffectBlock) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(returnedPendingSlasher, slasher, "pending slasher should be the new slasher"); + assertEq(returnedEffectBlock, effectBlock, "effect block should be the allocation config delay"); + + // Warp to effect block + cheats.roll(effectBlock); + + // Check values after config delay + (returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, slasher, "slasher should be the new slasher"); + (returnedPendingSlasher, returnedEffectBlock) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(returnedPendingSlasher, address(0), "pending slasher should be the 0 address"); + assertEq(returnedEffectBlock, 0, "effect block should be 0"); + } + + function test_fuzz_updateSlasher_multipleTimesWithinConfigurationDelay(Randomness r) public rand(r) { + address firstSlasher = r.Address(); + address secondSlasher = r.Address(); + + // Set slasher + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, firstSlasher); + (address pendingSlasher,) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(pendingSlasher, firstSlasher, "pending slasher should be the first slasher"); + + // Warp just before effect block + cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY); + + // Set slasher again + cheats.expectEmit(true, true, true, true, address(allocationManager)); + uint32 secondSlasherEffectBlock = uint32(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + emit SlasherUpdated(defaultOperatorSet, secondSlasher, secondSlasherEffectBlock); + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, secondSlasher); + + // Warp to effect block of first slasher + cheats.roll(block.number + 1); + + // Assert that the slasher is still not set + (address returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, defaultAVS, "returned slasher should still be the defaultAVS"); + (address returnedPendingSlasher, uint32 returnedEffectBlock) = allocationManager.getPendingSlasher(defaultOperatorSet); + assertEq(returnedPendingSlasher, secondSlasher, "pending slasher should be the second slasher"); + assertEq(returnedEffectBlock, secondSlasherEffectBlock, "effect block should be the allocation config delay"); + + // Warp to effect block of second slasher + cheats.roll(secondSlasherEffectBlock); + (returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, secondSlasher, "slasher not set"); + } + + function testFuzz_multipleDelays(Randomness r) public rand(r) { + address firstSlasher = r.Address(); + address secondSlasher = r.Address(); + + // Set Slasher + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, firstSlasher); + + // Warp to effect block of first slasher + cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + + // Set slasher again + cheats.prank(defaultAVS); + allocationManager.updateSlasher(defaultOperatorSet, secondSlasher); + + // Assert that first slasher is the current slasher + (address returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, firstSlasher, "slasher not set"); + + // Warp to effect block of second slasher + cheats.roll(block.number + ALLOCATION_CONFIGURATION_DELAY + 1); + (returnedSlasher) = allocationManager.getSlasher(defaultOperatorSet); + assertEq(returnedSlasher, secondSlasher, "slasher not set"); + } +} + +contract AllocationManagerUnitTests_migrateSlashers is AllocationManagerUnitTests { + using ArrayLib for *; + + // Test appointees + address appointee1 = address(0x1); + address appointee2 = address(0x2); + + function _assertNothingPending(OperatorSet memory operatorSet) internal view { + (address returnedPendingSlasher, uint32 returnedEffectBlock) = allocationManager.getPendingSlasher(operatorSet); + assertEq(returnedPendingSlasher, address(0), "pending slasher should be the 0 address"); + assertEq(returnedEffectBlock, 0, "effect block should be 0"); + } + + function setUp() public override { + AllocationManagerUnitTests.setUp(); + + // Manually set the slasher of the defaultAVS to be address(0) + // Given that the slasher is already set to the defaultAVS, we need to manually update so that the `migrateSlashers` function will not noop + AllocationManagerHarness(address(allocationManager)).setSlasherToZero(defaultOperatorSet); + } + + function test_noop_invalidOperatorSet() public { + OperatorSet memory operatorSet = OperatorSet(defaultAVS, 1); + + // Start recording + vm.record(); + allocationManager.migrateSlashers(operatorSet.toArray()); + + (bytes32[] memory reads,) = vm.accesses(address(allocationManager)); + assertEq(reads.length, 3, "should have 3 reads"); + } + + /// @dev This test is ignored by coverage due to an extra vm.access call + function test_noCoverage_noop_slasherAlreadySet() public { + // Register the operatorSet + OperatorSet memory operatorSet = OperatorSet(defaultAVS, 1); + CreateSetParams[] memory createSetParams = new CreateSetParams[](1); + createSetParams[0] = CreateSetParams(operatorSet.id, new IStrategy[](0)); + cheats.prank(defaultAVS); + allocationManager.createOperatorSets(defaultAVS, createSetParams); + + // Start recording - in this case the slasher is already set, so we noop after + vm.record(); + allocationManager.migrateSlashers(operatorSet.toArray()); + + (bytes32[] memory reads,) = vm.accesses(address(allocationManager)); + assertEq(reads.length, 5, "should have 5 reads"); + } + + function test_noSlasherInPC() public { + // Migrate the slasher + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(defaultOperatorSet, defaultAVS, uint32(block.number)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherMigrated(defaultOperatorSet, defaultAVS); + vm.record(); + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + + // Sanity check on number of reads (greater than previous test) + (bytes32[] memory reads,) = vm.accesses(address(allocationManager)); + assertGt(reads.length, 5, "should have greater than 5 reads"); + + // Check that the slasher is set to the defaultAVS + assertEq(allocationManager.getSlasher(defaultOperatorSet), defaultAVS, "slasher should be the defaultAVS"); + _assertNothingPending(defaultOperatorSet); + } + + function test_zeroAddressInPC() public { + // Add an appointee for the zero address + cheats.prank(defaultAVS); + permissionController.setAppointee(defaultAVS, address(0), address(allocationManager), allocationManager.slashOperator.selector); + + // Migrate the slasher + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(defaultOperatorSet, defaultAVS, uint32(block.number)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherMigrated(defaultOperatorSet, defaultAVS); + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + + // Check that the slasher is set to the defaultAVS + assertEq(allocationManager.getSlasher(defaultOperatorSet), defaultAVS, "slasher should be the defaultAVS"); + _assertNothingPending(defaultOperatorSet); + } + + function test_multipleAppointees() public { + // Add two appointees + cheats.startPrank(defaultAVS); + permissionController.setAppointee(defaultAVS, appointee1, address(allocationManager), allocationManager.slashOperator.selector); + permissionController.setAppointee(defaultAVS, appointee2, address(allocationManager), allocationManager.slashOperator.selector); + cheats.stopPrank(); + + // Migrate the slasher - only the first appointee should be set + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(defaultOperatorSet, appointee1, uint32(block.number)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherMigrated(defaultOperatorSet, appointee1); + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + + // Check that the slasher is set to the first appointee + assertEq(allocationManager.getSlasher(defaultOperatorSet), appointee1, "slasher should be the first appointee"); + _assertNothingPending(defaultOperatorSet); + } + + /// @notice Same as previous test, bus since appointee2 is added first, the slasher should be the second appointee + function test_multipleAppointees_differentOrder() public { + // Add two appointees + cheats.startPrank(defaultAVS); + permissionController.setAppointee(defaultAVS, appointee2, address(allocationManager), allocationManager.slashOperator.selector); + permissionController.setAppointee(defaultAVS, appointee1, address(allocationManager), allocationManager.slashOperator.selector); + cheats.stopPrank(); + + // Migrate the slasher - only the second appointee should be set + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(defaultOperatorSet, appointee2, uint32(block.number)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherMigrated(defaultOperatorSet, appointee2); + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + + // Check that the slasher is set to the second appointee + assertEq(allocationManager.getSlasher(defaultOperatorSet), appointee2, "slasher should be the second appointee"); + _assertNothingPending(defaultOperatorSet); + } + + /// @dev This test is ignored by coverage due to an extra vm.access call + function test_noCoverage_cannotMigrateMultipleTimes() public { + // Migrate the slasher + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + assertEq(allocationManager.getSlasher(defaultOperatorSet), defaultAVS, "slasher should be the defaultAVS"); + + // Set an appointee for the slasher + cheats.prank(defaultAVS); + permissionController.setAppointee(defaultAVS, appointee1, address(allocationManager), allocationManager.slashOperator.selector); + + // Migrate the slasher again - should noop + vm.record(); + allocationManager.migrateSlashers(defaultOperatorSet.toArray()); + + // Sanity check on number of reads (should be 5) + (bytes32[] memory reads,) = vm.accesses(address(allocationManager)); + assertEq(reads.length, 5, "should have 5 reads"); + + // Check that the slasher is still set to the defaultAVS + assertEq(allocationManager.getSlasher(defaultOperatorSet), defaultAVS, "slasher should be the defaultAVS"); + _assertNothingPending(defaultOperatorSet); + } + + function testFuzz_migrateSlashers_Correctness(Randomness r) public rand(r) { + address avs = r.Address(); + uint numOpSets = r.Uint256(1, FUZZ_MAX_OP_SETS); + + cheats.prank(avs); + allocationManager.updateAVSMetadataURI(avs, "https://example.com"); + + CreateSetParamsV2[] memory createSetParams = new CreateSetParamsV2[](numOpSets); + OperatorSet[] memory operatorSets = new OperatorSet[](numOpSets); + + for (uint i = 0; i < numOpSets; ++i) { + createSetParams[i].operatorSetId = r.Uint32(1, type(uint32).max); + createSetParams[i].strategies = r.StrategyArray(0); + createSetParams[i].slasher = r.Address(); + operatorSets[i] = OperatorSet(avs, createSetParams[i].operatorSetId); + } + + cheats.prank(avs); + allocationManager.createOperatorSets(avs, createSetParams); + + // Set slashers to zero address on all previously create opSets so we can migrate them + for (uint i = 0; i < numOpSets; ++i) { + AllocationManagerHarness(address(allocationManager)).setSlasherToZero(operatorSets[i]); + } + + // Expect event emits + for (uint i = 0; i < numOpSets; ++i) { + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherUpdated(operatorSets[i], avs, uint32(block.number)); + cheats.expectEmit(true, true, true, true, address(allocationManager)); + emit SlasherMigrated(operatorSets[i], avs); + } + + // Migrate the slashers + allocationManager.migrateSlashers(operatorSets); + + // Check that the slashers are set to the AVS + for (uint i = 0; i < numOpSets; ++i) { + assertEq(allocationManager.getSlasher(operatorSets[i]), avs, "slasher should be the AVS"); + _assertNothingPending(operatorSets[i]); + } + } +} + contract AllocationManagerUnitTests_setAVSRegistrar is AllocationManagerUnitTests { function test_getAVSRegistrar() public { address randomAVS = random().Address(); diff --git a/src/test/unit/BN254CertificateVerifierUnit.t.sol b/src/test/unit/BN254CertificateVerifierUnit.t.sol index 09d8c24b4d..5fab075f21 100644 --- a/src/test/unit/BN254CertificateVerifierUnit.t.sol +++ b/src/test/unit/BN254CertificateVerifierUnit.t.sol @@ -60,8 +60,7 @@ contract BN254CertificateVerifierUnitTests is defaultOperatorSetConfig = OperatorSetConfig({owner: operatorSetOwner, maxStalenessPeriod: defaultMaxStaleness}); // Deploy Contracts - bn254CertificateVerifierImplementation = - new BN254CertificateVerifier(IOperatorTableUpdater(address(operatorTableUpdaterMock)), "1.0.0"); + bn254CertificateVerifierImplementation = new BN254CertificateVerifier(IOperatorTableUpdater(address(operatorTableUpdaterMock))); verifier = BN254CertificateVerifier( address(new TransparentUpgradeableProxy(address(bn254CertificateVerifierImplementation), address(eigenLayerProxyAdmin), "")) ); diff --git a/src/test/unit/CrossChainRegistryUnit.t.sol b/src/test/unit/CrossChainRegistryUnit.t.sol index 8c5ee5e252..d88ad2071c 100644 --- a/src/test/unit/CrossChainRegistryUnit.t.sol +++ b/src/test/unit/CrossChainRegistryUnit.t.sol @@ -44,8 +44,7 @@ contract CrossChainRegistryUnitTests is IAllocationManager(address(allocationManagerMock)), IKeyRegistrar(address(keyRegistrar)), IPermissionController(address(permissionController)), - pauserRegistry, - "1.0.0" + pauserRegistry ); // Deploy CrossChainRegistry proxy @@ -147,8 +146,7 @@ contract CrossChainRegistryUnitTests_initialize is CrossChainRegistryUnitTests { IAllocationManager(address(allocationManagerMock)), IKeyRegistrar(address(keyRegistrar)), IPermissionController(address(permissionController)), - pauserRegistry, - "1.0.0" + pauserRegistry ); address newOwner = cheats.randomAddress(); diff --git a/src/test/unit/DelegationUnit.t.sol b/src/test/unit/DelegationUnit.t.sol index ae8ebecac5..24291d45bd 100644 --- a/src/test/unit/DelegationUnit.t.sol +++ b/src/test/unit/DelegationUnit.t.sol @@ -113,7 +113,7 @@ contract DelegationManagerUnitTests is EigenLayerUnitTestSetup, IDelegationManag // Deploy mock token and strategy tokenMock = new ERC20PresetFixedSupply("Mock Token", "MOCK", tokenMockInitialSupply, address(this)); - strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry, "9.9.9"); + strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry); strategyMock = StrategyBase( address( new TransparentUpgradeableProxy( @@ -5676,6 +5676,33 @@ contract DelegationManagerUnitTests_slashingShares is DelegationManagerUnitTests assertEq(slashableSharesInQueueAfter, 0, "slashable shares in queue should be 0 after burning"); } + /// @notice Verifies getSlashableSharesInQueue returns 0 when operator is fully slashed (maxMagnitude = 0). + /// A fully slashed operator has no remaining slashable shares. + function test_getSlashableSharesInQueue_ReturnsZero_WhenFullySlashed() public { + // Register operator and set up deposits + _registerOperatorWithBaseDetails(defaultOperator); + _setOperatorMagnitude(defaultOperator, strategyMock, WAD); + + uint depositAmount = 100e18; + strategyManagerMock.addDeposit(defaultStaker, strategyMock, depositAmount); + _delegateToOperatorWhoAcceptsAllStakers(defaultStaker, defaultOperator); + + // Queue a withdrawal so there are shares in the queue + (QueuedWithdrawalParams[] memory queuedWithdrawalParams,,) = + _setUpQueueWithdrawalsSingleStrat({staker: defaultStaker, strategy: strategyMock, depositSharesToWithdraw: depositAmount}); + cheats.prank(defaultStaker); + delegationManager.queueWithdrawals(queuedWithdrawalParams); + + // Fully slash the operator (maxMagnitude -> 0) + _setOperatorMagnitude(defaultOperator, strategyMock, 0); + cheats.prank(address(allocationManagerMock)); + delegationManager.slashOperatorShares(defaultOperator, defaultOperatorSet, defaultSlashId, strategyMock, WAD, uint64(0)); + + // After full slashing, there are no more slashable shares - should return 0 + uint slashableShares = delegationManager.getSlashableSharesInQueue(defaultOperator, strategyMock); + assertEq(slashableShares, 0, "fully slashed operator should have 0 slashable shares in queue"); + } + /// @notice Verifies that shares are NOT burnable for a withdrawal queued just before the MIN_WITHDRAWAL_DELAY_BLOCKS function test_sharesNotBurnableWhenWithdrawalCompletable() public { // Register operator diff --git a/src/test/unit/EigenPodManagerUnit.t.sol b/src/test/unit/EigenPodManagerUnit.t.sol index 1e9e475146..950a4cde5e 100644 --- a/src/test/unit/EigenPodManagerUnit.t.sol +++ b/src/test/unit/EigenPodManagerUnit.t.sol @@ -43,7 +43,7 @@ contract EigenPodManagerUnitTests is EigenLayerUnitTestSetup, IEigenPodManagerEv // Deploy EPM Implementation & Proxy eigenPodManagerImplementation = - new EigenPodManager(ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry, "9.9.9"); + new EigenPodManager(ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry); eigenPodManager = EigenPodManager( address( new TransparentUpgradeableProxy( @@ -233,9 +233,8 @@ contract EigenPodManagerUnitTests_ShareUpdateTests is EigenPodManagerUnitTests { super.setUp(); // Upgrade eigenPodManager to wrapper - eigenPodManagerWrapper = new EigenPodManagerWrapper( - ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry, "9.9.9" - ); + eigenPodManagerWrapper = + new EigenPodManagerWrapper(ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry); eigenLayerProxyAdmin.upgrade(ITransparentUpgradeableProxy(payable(address(eigenPodManager))), address(eigenPodManagerWrapper)); } @@ -424,9 +423,8 @@ contract EigenPodManagerUnitTests_WithdrawSharesAsTokensTests is EigenPodManager super.setUp(); // Upgrade eigenPodManager to wrapper - eigenPodManagerWrapper = new EigenPodManagerWrapper( - ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry, "9.9.9" - ); + eigenPodManagerWrapper = + new EigenPodManagerWrapper(ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry); eigenLayerProxyAdmin.upgrade(ITransparentUpgradeableProxy(payable(address(eigenPodManager))), address(eigenPodManagerWrapper)); } /** @@ -545,9 +543,8 @@ contract EigenPodManagerUnitTests_BeaconChainETHBalanceUpdateTests is EigenPodMa super.setUp(); // Upgrade eigenPodManager to wrapper - eigenPodManagerWrapper = new EigenPodManagerWrapper( - ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry, "9.9.9" - ); + eigenPodManagerWrapper = + new EigenPodManagerWrapper(ethPOSMock, eigenPodBeacon, IDelegationManager(address(delegationManagerMock)), pauserRegistry); eigenLayerProxyAdmin.upgrade(ITransparentUpgradeableProxy(payable(address(eigenPodManager))), address(eigenPodManagerWrapper)); } diff --git a/src/test/unit/EigenPodUnit.t.sol b/src/test/unit/EigenPodUnit.t.sol index 4d0adcdf5a..346b8549b0 100644 --- a/src/test/unit/EigenPodUnit.t.sol +++ b/src/test/unit/EigenPodUnit.t.sol @@ -59,7 +59,7 @@ contract EigenPodUnitTests is EigenLayerUnitTestSetup, EigenPodPausingConstants, beaconChain = new BeaconChainMock(EigenPodManager(address(eigenPodManagerMock)), GENESIS_TIME_LOCAL); // Deploy EigenPod - podImplementation = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock)), "v9.9.9"); + podImplementation = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock))); // Deploy Beacon eigenPodBeacon = new UpgradeableBeacon(address(podImplementation)); @@ -305,7 +305,7 @@ contract EigenPodUnitTests is EigenLayerUnitTestSetup, EigenPodPausingConstants, contract EigenPodUnitTests_Initialization is EigenPodUnitTests { function test_constructor() public { - EigenPod pod = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock)), "v9.9.9"); + EigenPod pod = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock))); assertTrue(pod.ethPOS() == ethPOSDepositMock, "should have set ethPOS correctly"); assertTrue(address(pod.eigenPodManager()) == address(eigenPodManagerMock), "should have set eigenpodmanager correctly"); @@ -331,7 +331,7 @@ contract EigenPodUnitTests_Initialization is EigenPodUnitTests { } function test_initialize_revert_emptyPodOwner() public { - EigenPod pod = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock)), "v9.9.9"); + EigenPod pod = new EigenPod(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock))); // un-initialize pod cheats.store(address(pod), 0, 0); @@ -1973,7 +1973,7 @@ contract EigenPodHarnessSetup is EigenPodUnitTests { EigenPodUnitTests.setUp(); // Deploy EP Harness - eigenPodHarnessImplementation = new EigenPodHarness(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock)), "v9.9.9"); + eigenPodHarnessImplementation = new EigenPodHarness(ethPOSDepositMock, IEigenPodManager(address(eigenPodManagerMock))); // Upgrade eigenPod to harness UpgradeableBeacon(address(eigenPodBeacon)).upgradeTo(address(eigenPodHarnessImplementation)); diff --git a/src/test/unit/KeyRegistrarUnit.t.sol b/src/test/unit/KeyRegistrarUnit.t.sol index ab6cb6bdb7..eb09ce75cf 100644 --- a/src/test/unit/KeyRegistrarUnit.t.sol +++ b/src/test/unit/KeyRegistrarUnit.t.sol @@ -1130,10 +1130,8 @@ contract KeyRegistrarUnitTests_GlobalKeyPersistence is KeyRegistrarUnitTests { } } -/** - * @title KeyRegistrarUnitTests_CrossCurveInteraction - * @notice Unit tests for cross-curve type interactions in KeyRegistrar - */ +/// @title KeyRegistrarUnitTests_CrossCurveInteraction +/// @notice Unit tests for cross-curve type interactions in KeyRegistrar contract KeyRegistrarUnitTests_CrossCurveInteraction is KeyRegistrarUnitTests { function test_crossCurveGlobalUniqueness() public { // Configure ECDSA and BN254 operator sets diff --git a/src/test/unit/OperatorTableUpdaterUnit.t.sol b/src/test/unit/OperatorTableUpdaterUnit.t.sol index bfd94964a1..02fc962e8d 100644 --- a/src/test/unit/OperatorTableUpdaterUnit.t.sol +++ b/src/test/unit/OperatorTableUpdaterUnit.t.sol @@ -48,8 +48,7 @@ contract OperatorTableUpdaterUnitTests is operatorTableUpdaterImplementation = new OperatorTableUpdater( IBN254CertificateVerifier(address(bn254CertificateVerifierMock)), IECDSACertificateVerifier(address(ecdsaCertificateVerifierMock)), - pauserRegistry, - "1.0.0" + pauserRegistry ); eigenLayerProxyAdmin.upgradeAndCall( diff --git a/src/test/unit/PermissionControllerUnit.t.sol b/src/test/unit/PermissionControllerUnit.t.sol index 4119f1a700..f9af5c564e 100644 --- a/src/test/unit/PermissionControllerUnit.t.sol +++ b/src/test/unit/PermissionControllerUnit.t.sol @@ -18,7 +18,7 @@ contract PermissionControllerUnitTests is EigenLayerUnitTestSetup, IPermissionCo address target1; address target2; bytes4 selector1 = IDelegationManager.updateOperatorMetadataURI.selector; - bytes4 selector2 = IAllocationManager.modifyAllocations.selector; + bytes4 selector2 = IAllocationManagerActions.modifyAllocations.selector; function setUp() public virtual override { // Setup - already deploys permissionController diff --git a/src/test/unit/ProtocolRegistryUnit.t.sol b/src/test/unit/ProtocolRegistryUnit.t.sol new file mode 100644 index 0000000000..e2eb3b694f --- /dev/null +++ b/src/test/unit/ProtocolRegistryUnit.t.sol @@ -0,0 +1,421 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "src/contracts/core/ProtocolRegistry.sol"; +import "src/test/utils/EigenLayerUnitTestSetup.sol"; + +contract ProtocolRegistryUnitTests is EigenLayerUnitTestSetup, IProtocolRegistryEvents, IProtocolRegistryErrors { + ProtocolRegistry protocolRegistry; + ProxyAdminMock proxyAdminMock; + + address defaultOwner; + address nonOwner; + address pauserMultisig; + + string internal currentVersion; + uint internal currentMajorVersion; + + function setUp() public virtual override { + EigenLayerUnitTestSetup.setUp(); + + defaultOwner = address(this); + nonOwner = cheats.randomAddress(); + pauserMultisig = cheats.randomAddress(); + + proxyAdminMock = new ProxyAdminMock(); + protocolRegistry = _deployProtocolRegistry(address(proxyAdminMock)); + } + + function _deployProtocolRegistry(address proxyAdmin) internal returns (ProtocolRegistry registry) { + registry = ProtocolRegistry( + address( + new TransparentUpgradeableProxy( + address(new ProtocolRegistry()), + address(eigenLayerProxyAdmin), + abi.encodeWithSelector(ProtocolRegistry.initialize.selector, defaultOwner, pauserMultisig) + ) + ) + ); + isExcludedFuzzAddress[address(registry)] = true; + } + + /// ----------------------------------------------------------------------- + /// initialize() + /// ----------------------------------------------------------------------- + + function test_initialize_Correctness() public { + assertEq(protocolRegistry.hasRole(protocolRegistry.DEFAULT_ADMIN_ROLE(), defaultOwner), true); + assertEq(protocolRegistry.hasRole(protocolRegistry.PAUSER_ROLE(), pauserMultisig), true); + assertEq(protocolRegistry.getRoleMemberCount(protocolRegistry.DEFAULT_ADMIN_ROLE()), 1); + assertEq(protocolRegistry.getRoleMemberCount(protocolRegistry.PAUSER_ROLE()), 1); + assertEq(protocolRegistry.getRoleMember(protocolRegistry.DEFAULT_ADMIN_ROLE(), 0), defaultOwner); + assertEq(protocolRegistry.getRoleMember(protocolRegistry.PAUSER_ROLE(), 0), pauserMultisig); + cheats.expectRevert("Initializable: contract is already initialized"); + protocolRegistry.initialize(defaultOwner, pauserMultisig); + } + + /// ----------------------------------------------------------------------- + /// ship() + /// ----------------------------------------------------------------------- + + function test_ship_OnlyOwner() public { + address[] memory addresses = new address[](1); + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](1); + string[] memory names = new string[](1); + + cheats.prank(nonOwner); + cheats.expectRevert(); + protocolRegistry.ship(addresses, configs, names, "1.0.0"); + } + + function test_ship_SingleDeployment() public { + address addr = cheats.randomAddress(); + address[] memory addresses = new address[](1); + addresses[0] = addr; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](1); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + + string[] memory names = new string[](1); + names[0] = "TestContract"; + + string memory version = "1.0.0"; + + cheats.expectEmit(true, true, true, true, address(protocolRegistry)); + emit SemanticVersionUpdated("", version); + cheats.expectEmit(true, true, true, true, address(protocolRegistry)); + emit DeploymentShipped(addr, configs[0]); + + protocolRegistry.ship(addresses, configs, names, version); + + // Check version getter + assertEq(protocolRegistry.version(), version); + + // Check major version getter + assertEq(protocolRegistry.majorVersion(), "1"); + + currentVersion = version; + currentMajorVersion = 1; + + assertEq(protocolRegistry.totalDeployments(), 1); + assertEq(protocolRegistry.getAddress("TestContract"), addr); + } + + function test_ship_MultipleDeployments() public { + address addr1 = address(0x1); + address addr2 = address(0x2); + address addr3 = address(0x3); + + address[] memory addresses = new address[](3); + addresses[0] = addr1; + addresses[1] = addr2; + addresses[2] = addr3; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](3); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + configs[1] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + configs[2] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: true}); + + string[] memory names = new string[](3); + names[0] = "Contract1"; + names[1] = "Contract2"; + names[2] = "Contract3"; + + string memory version = "2.0.0"; + + protocolRegistry.ship(addresses, configs, names, version); + + // Check version getter + assertEq(protocolRegistry.version(), version); + // Check major version getter + assertEq(protocolRegistry.majorVersion(), "2"); + + currentVersion = version; + currentMajorVersion = 2; + + assertEq(protocolRegistry.totalDeployments(), 3); + assertEq(protocolRegistry.getAddress("Contract1"), addr1); + assertEq(protocolRegistry.getAddress("Contract2"), addr2); + assertEq(protocolRegistry.getAddress("Contract3"), addr3); + } + + /// ----------------------------------------------------------------------- + /// configure() + /// ----------------------------------------------------------------------- + + function test_configure_OnlyOwner() public { + address addr = cheats.randomAddress(); + IProtocolRegistryTypes.DeploymentConfig memory config = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + + cheats.prank(nonOwner); + cheats.expectRevert(); + protocolRegistry.configure(addr, config); + } + + function test_configure_Correctness() public { + // First ship a deployment + address addr = address(0x123); + address[] memory addresses = new address[](1); + addresses[0] = addr; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](1); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + + string[] memory names = new string[](1); + names[0] = "TestContract"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check version getter + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + // Update config + IProtocolRegistryTypes.DeploymentConfig memory newConfig = + IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: true}); + + cheats.expectEmit(true, true, true, true, address(protocolRegistry)); + emit DeploymentConfigured(addr, newConfig); + + protocolRegistry.configure(addr, newConfig); + + (, IProtocolRegistryTypes.DeploymentConfig memory retrievedConfig) = protocolRegistry.getDeployment("TestContract"); + assertEq(retrievedConfig.pausable, true); + assertEq(retrievedConfig.deprecated, true); + } + + /// ----------------------------------------------------------------------- + /// pauseAll() + /// ----------------------------------------------------------------------- + + function test_pauseAll_OnlyPauserMultisig() public { + cheats.prank(nonOwner); + cheats.expectRevert(); + protocolRegistry.pauseAll(); + } + + function test_pauseAll_PausableContracts() public { + PausableMock pausable1 = new PausableMock(); + PausableMock pausable2 = new PausableMock(); + address nonPausable = address(emptyContract); + + address[] memory addresses = new address[](3); + addresses[0] = address(pausable1); + addresses[1] = nonPausable; + addresses[2] = address(pausable2); + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](3); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + configs[1] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + configs[2] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + + string[] memory names = new string[](3); + names[0] = "Pausable1"; + names[1] = "NonPausable"; + names[2] = "Pausable2"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check hecks for version and major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + cheats.prank(pauserMultisig); + protocolRegistry.pauseAll(); + + assertTrue(pausable1.paused()); + assertTrue(pausable2.paused()); + } + + function test_pauseAll_SkipsDeprecated() public { + PausableMock pausable = new PausableMock(); + PausableMock deprecated = new PausableMock(); + + address[] memory addresses = new address[](2); + addresses[0] = address(pausable); + addresses[1] = address(deprecated); + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](2); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + configs[1] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: true}); + + string[] memory names = new string[](2); + names[0] = "Active"; + names[1] = "Deprecated"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check hecks for version and major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + cheats.prank(pauserMultisig); + protocolRegistry.pauseAll(); + + assertTrue(pausable.paused()); + assertFalse(deprecated.paused()); + } + + /// ----------------------------------------------------------------------- + /// getAddress() + /// ----------------------------------------------------------------------- + + function test_getAddress_ExistingDeployment() public { + address addr = address(0x456); + address[] memory addresses = new address[](1); + addresses[0] = addr; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](1); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + + string[] memory names = new string[](1); + names[0] = "MyContract"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check version and major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + assertEq(protocolRegistry.getAddress("MyContract"), addr); + } + + /// ----------------------------------------------------------------------- + /// getDeployment() + /// ----------------------------------------------------------------------- + + function test_getDeployment() public { + address addr = address(0x789); + address[] memory addresses = new address[](1); + addresses[0] = addr; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](1); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + + string[] memory names = new string[](1); + names[0] = "MyContract"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check version and major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + (address retAddr, IProtocolRegistryTypes.DeploymentConfig memory config) = protocolRegistry.getDeployment("MyContract"); + + assertEq(retAddr, addr); + assertEq(config.pausable, true); + assertEq(config.deprecated, false); + } + + /// ----------------------------------------------------------------------- + /// getAllDeployments() + /// ----------------------------------------------------------------------- + + function test_getAllDeployments_Empty() public { + (string[] memory names, address[] memory addresses, IProtocolRegistryTypes.DeploymentConfig[] memory configs) = + protocolRegistry.getAllDeployments(); + + assertEq(names.length, 0); + assertEq(addresses.length, 0); + assertEq(configs.length, 0); + } + + function test_getAllDeployments_Multiple() public { + address addr1 = address(0x1111); + address addr2 = address(0x2222); + + address[] memory addresses = new address[](2); + addresses[0] = addr1; + addresses[1] = addr2; + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](2); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: true, deprecated: false}); + configs[1] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: true}); + + string[] memory names = new string[](2); + names[0] = "First"; + names[1] = "Second"; + + string memory version = "3.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Check version & major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "3"); + + (string[] memory retNames, address[] memory retAddresses, IProtocolRegistryTypes.DeploymentConfig[] memory retConfigs) = + protocolRegistry.getAllDeployments(); + + assertEq(retNames.length, 2); + assertEq(retAddresses.length, 2); + assertEq(retConfigs.length, 2); + + assertEq(retNames[0], "First"); + assertEq(retNames[1], "Second"); + assertEq(retAddresses[0], addr1); + assertEq(retAddresses[1], addr2); + assertEq(retConfigs[0].pausable, true); + } + + /// ----------------------------------------------------------------------- + /// totalDeployments() + /// ----------------------------------------------------------------------- + + function test_totalDeployments_InitiallyZero() public { + assertEq(protocolRegistry.totalDeployments(), 0); + } + + function test_totalDeployments_IncreasesWithShip() public { + address[] memory addresses = new address[](2); + addresses[0] = address(0x1); + addresses[1] = address(0x2); + + IProtocolRegistryTypes.DeploymentConfig[] memory configs = new IProtocolRegistryTypes.DeploymentConfig[](2); + configs[0] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + configs[1] = IProtocolRegistryTypes.DeploymentConfig({pausable: false, deprecated: false}); + + string[] memory names = new string[](2); + names[0] = "A"; + names[1] = "B"; + + string memory version = "1.0.0"; + protocolRegistry.ship(addresses, configs, names, version); + + // Test version and major version + assertEq(protocolRegistry.version(), version); + assertEq(protocolRegistry.majorVersion(), "1"); + + assertEq(protocolRegistry.totalDeployments(), 2); + } +} + +// Mock contracts for testing +contract PausableMock { + bool private _paused; + + function pauseAll() external { + _paused = true; + } + + function paused() external view returns (bool) { + return _paused; + } +} + +contract ProxyAdminMock { + mapping(address => address) private _implementations; + + function setImplementation(address proxy, address implementation) external { + _implementations[proxy] = implementation; + } + + function getProxyImplementation(address proxy) external view returns (address) { + return _implementations[proxy]; + } +} diff --git a/src/test/unit/ReleaseManagerUnit.t.sol b/src/test/unit/ReleaseManagerUnit.t.sol index 6d2bc6ab96..920a39d1c9 100644 --- a/src/test/unit/ReleaseManagerUnit.t.sol +++ b/src/test/unit/ReleaseManagerUnit.t.sol @@ -44,7 +44,7 @@ contract ReleaseManagerUnitTests is EigenLayerUnitTestSetup, IReleaseManagerErro vm.warp(1 days); // Deploy ReleaseManager - releaseManager = new ReleaseManager(permissionController, "1.0.0"); + releaseManager = new ReleaseManager(permissionController); // Setup default test data defaultOperatorSet = OperatorSet(defaultAVS, 0); @@ -108,7 +108,6 @@ contract ReleaseManagerUnitTests_Initialization is ReleaseManagerUnitTests { function test_constructor() public { // Test that constructor sets the correct values assertEq(address(releaseManager.permissionController()), address(permissionController), "permissionController not set correctly"); - assertEq(releaseManager.version(), "1.0.0", "version not set correctly"); } } diff --git a/src/test/unit/RewardsCoordinatorUnit.t.sol b/src/test/unit/RewardsCoordinatorUnit.t.sol index 9f98ff320e..bf31c7975d 100644 --- a/src/test/unit/RewardsCoordinatorUnit.t.sol +++ b/src/test/unit/RewardsCoordinatorUnit.t.sol @@ -118,8 +118,7 @@ contract RewardsCoordinatorUnitTests is EigenLayerUnitTestSetup, IRewardsCoordin MAX_REWARDS_DURATION: MAX_REWARDS_DURATION, MAX_RETROACTIVE_LENGTH: MAX_RETROACTIVE_LENGTH, MAX_FUTURE_LENGTH: MAX_FUTURE_LENGTH, - GENESIS_REWARDS_TIMESTAMP: GENESIS_REWARDS_TIMESTAMP, - version: "9.9.9" + GENESIS_REWARDS_TIMESTAMP: GENESIS_REWARDS_TIMESTAMP }) ); @@ -145,7 +144,7 @@ contract RewardsCoordinatorUnitTests is EigenLayerUnitTestSetup, IRewardsCoordin token2 = new ERC20PresetFixedSupply("jeo boden", "MOCK2", mockTokenInitialSupply, address(this)); token3 = new ERC20PresetFixedSupply("pepe wif avs", "MOCK3", mockTokenInitialSupply, address(this)); - strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry, "9.9.9"); + strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry); strategyMock1 = StrategyBase( address( new TransparentUpgradeableProxy( diff --git a/src/test/unit/SplitContractMixin.t.sol b/src/test/unit/SplitContractMixin.t.sol new file mode 100644 index 0000000000..d6c365fce4 --- /dev/null +++ b/src/test/unit/SplitContractMixin.t.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: BUSL-1.1 +pragma solidity ^0.8.27; + +import "forge-std/Test.sol"; +import "src/contracts/mixins/SplitContractMixin.sol"; + +contract SplitContractMixinTest is Test, SplitContractMixin { + uint value; + Delegate public delegate; + + constructor() SplitContractMixin(address(0x123)) { + value = vm.randomUint(); + delegate = new Delegate(); + } + + function getValue() public view returns (uint result) { + _delegateView(address(delegate)); + result; + } + + function test_getValue() public { + (bool success, bytes memory data) = address(this).call(abi.encodeWithSelector(this.getValue.selector)); + assertTrue(success); + uint result = abi.decode(data, (uint)); + assertEq(result, value); + } +} + +// Mock contract to test delegation +contract Delegate is Test { + uint value; + + function getValue() public view returns (uint result) { + return value; + } +} diff --git a/src/test/unit/StrategyBaseTVLLimitsUnit.sol b/src/test/unit/StrategyBaseTVLLimitsUnit.sol index 15a8040655..fecc9eeb24 100644 --- a/src/test/unit/StrategyBaseTVLLimitsUnit.sol +++ b/src/test/unit/StrategyBaseTVLLimitsUnit.sol @@ -24,7 +24,7 @@ contract StrategyBaseTVLLimitsUnitTests is StrategyBaseUnitTests { StrategyBaseUnitTests.setUp(); // depoloy the TVL-limited strategy - strategyBaseTVLLimitsImplementation = new StrategyBaseTVLLimits(strategyManager, pauserRegistry, "9.9.9"); + strategyBaseTVLLimitsImplementation = new StrategyBaseTVLLimits(strategyManager, pauserRegistry); strategyWithTVLLimits = StrategyBaseTVLLimits( address( new TransparentUpgradeableProxy( diff --git a/src/test/unit/StrategyBaseUnit.t.sol b/src/test/unit/StrategyBaseUnit.t.sol index aa0e20e36c..6680bde9a7 100644 --- a/src/test/unit/StrategyBaseUnit.t.sol +++ b/src/test/unit/StrategyBaseUnit.t.sol @@ -55,7 +55,7 @@ contract StrategyBaseUnitTests is Test { underlyingToken = new ERC20PresetFixedSupply("Test Token", "TEST", initialSupply, initialOwner); - strategyImplementation = new StrategyBase(strategyManager, pauserRegistry, "9.9.9"); + strategyImplementation = new StrategyBase(strategyManager, pauserRegistry); strategy = StrategyBase( address( @@ -160,7 +160,7 @@ contract StrategyBaseUnitTests is Test { // Deploy token with 1e39 total supply underlyingToken = new ERC20PresetFixedSupply("Test Token", "TEST", 1e39, initialOwner); - strategyImplementation = new StrategyBase(strategyManager, pauserRegistry, "9.9.9"); + strategyImplementation = new StrategyBase(strategyManager, pauserRegistry); strategy = StrategyBase( address( diff --git a/src/test/unit/StrategyFactoryUnit.t.sol b/src/test/unit/StrategyFactoryUnit.t.sol index 65f47e783d..5bc3869927 100644 --- a/src/test/unit/StrategyFactoryUnit.t.sol +++ b/src/test/unit/StrategyFactoryUnit.t.sol @@ -46,12 +46,12 @@ contract StrategyFactoryUnitTests is EigenLayerUnitTestSetup { underlyingToken = new ERC20PresetFixedSupply("Test Token", "TEST", initialSupply, initialOwner); - strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry, "9.9.9"); + strategyImplementation = new StrategyBase(IStrategyManager(address(strategyManagerMock)), pauserRegistry); strategyBeacon = new UpgradeableBeacon(address(strategyImplementation)); strategyBeacon.transferOwnership(beaconProxyOwner); - strategyFactoryImplementation = new StrategyFactory(IStrategyManager(address(strategyManagerMock)), pauserRegistry, "9.9.9"); + strategyFactoryImplementation = new StrategyFactory(IStrategyManager(address(strategyManagerMock)), pauserRegistry); strategyFactory = StrategyFactory( address( diff --git a/src/test/unit/StrategyManagerUnit.t.sol b/src/test/unit/StrategyManagerUnit.t.sol index d86ea93a85..eace3ca1e1 100644 --- a/src/test/unit/StrategyManagerUnit.t.sol +++ b/src/test/unit/StrategyManagerUnit.t.sol @@ -81,7 +81,7 @@ contract StrategyManagerUnitTests is EigenLayerUnitTestSetup, IStrategyManagerEv public returns (StrategyBase) { - StrategyBase newStrategyImplementation = new StrategyBase(_strategyManager, _pauserRegistry, "9.9.9"); + StrategyBase newStrategyImplementation = new StrategyBase(_strategyManager, _pauserRegistry); StrategyBase newStrategy = StrategyBase(address(new TransparentUpgradeableProxy(address(newStrategyImplementation), address(admin), ""))); newStrategy.initialize(_token); diff --git a/src/test/unit/TaskMailboxUnit.t.sol b/src/test/unit/TaskMailboxUnit.t.sol index 8017a45e12..7c08c8d486 100644 --- a/src/test/unit/TaskMailboxUnit.t.sol +++ b/src/test/unit/TaskMailboxUnit.t.sol @@ -68,7 +68,7 @@ contract TaskMailboxUnitTests is Test, ITaskMailboxTypes, ITaskMailboxErrors, IT // Deploy TaskMailbox with proxy pattern proxyAdmin = new ProxyAdmin(); TaskMailbox taskMailboxImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "1.0.0"); + new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(taskMailboxImpl), address(proxyAdmin), @@ -176,7 +176,7 @@ contract TaskMailboxUnitTests_Constructor is TaskMailboxUnitTests { // Deploy with proxy pattern ProxyAdmin proxyAdmin = new ProxyAdmin(); - TaskMailbox taskMailboxImpl = new TaskMailbox(bn254Verifier, ecdsaVerifier, MAX_TASK_SLA, "1.0.0"); + TaskMailbox taskMailboxImpl = new TaskMailbox(bn254Verifier, ecdsaVerifier, MAX_TASK_SLA); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(taskMailboxImpl), address(proxyAdmin), @@ -186,7 +186,6 @@ contract TaskMailboxUnitTests_Constructor is TaskMailboxUnitTests { assertEq(newTaskMailbox.BN254_CERTIFICATE_VERIFIER(), bn254Verifier); assertEq(newTaskMailbox.ECDSA_CERTIFICATE_VERIFIER(), ecdsaVerifier); - assertEq(newTaskMailbox.version(), "1.0.0"); assertEq(newTaskMailbox.owner(), owner); assertEq(newTaskMailbox.feeSplit(), 0); assertEq(newTaskMailbox.feeSplitCollector(), feeSplitCollector); @@ -199,7 +198,7 @@ contract TaskMailboxUnitTests_Constructor is TaskMailboxUnitTests { uint96 customMaxTaskSLA = 14 days; // Deploy with custom MAX_TASK_SLA - TaskMailbox taskMailboxImpl = new TaskMailbox(bn254Verifier, ecdsaVerifier, customMaxTaskSLA, "1.0.0"); + TaskMailbox taskMailboxImpl = new TaskMailbox(bn254Verifier, ecdsaVerifier, customMaxTaskSLA); ProxyAdmin proxyAdmin = new ProxyAdmin(); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(taskMailboxImpl), @@ -1250,8 +1249,7 @@ contract TaskMailboxUnitTests_submitResult is TaskMailboxUnitTests { // Deploy a new TaskMailbox with the failing verifier using proxy pattern ProxyAdmin proxyAdmin = new ProxyAdmin(); - TaskMailbox taskMailboxImpl = - new TaskMailbox(address(mockFailingVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "1.0.0"); + TaskMailbox taskMailboxImpl = new TaskMailbox(address(mockFailingVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(taskMailboxImpl), address(proxyAdmin), @@ -1302,7 +1300,7 @@ contract TaskMailboxUnitTests_submitResult is TaskMailboxUnitTests { // Deploy a new TaskMailbox with the failing ECDSA verifier using proxy pattern ProxyAdmin proxyAdmin = new ProxyAdmin(); TaskMailbox taskMailboxImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifierFailure), MAX_TASK_SLA, "1.0.0"); + new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifierFailure), MAX_TASK_SLA); TransparentUpgradeableProxy proxy = new TransparentUpgradeableProxy( address(taskMailboxImpl), address(proxyAdmin), @@ -3005,7 +3003,6 @@ contract TaskMailboxUnitTests_ViewFunctions is TaskMailboxUnitTests { // Test that we can read the immutable certificate verifiers assertEq(taskMailbox.BN254_CERTIFICATE_VERIFIER(), address(mockBN254CertificateVerifier)); assertEq(taskMailbox.ECDSA_CERTIFICATE_VERIFIER(), address(mockECDSACertificateVerifier)); - assertEq(taskMailbox.version(), "1.0.0"); assertEq(taskMailbox.owner(), owner); // Test fee split getters @@ -3272,8 +3269,7 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { function test_Implementation_CannotBeInitialized() public { // Deploy a new implementation - TaskMailbox newImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "1.0.1"); + TaskMailbox newImpl = new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); // Try to initialize the implementation directly, should revert vm.expectRevert("Initializable: contract is already initialized"); @@ -3284,18 +3280,11 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { address newOwner = address(0x1234); // Deploy new implementation with different version - TaskMailbox newImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "2.0.0"); - - // Check version before upgrade - assertEq(taskMailbox.version(), "1.0.0"); + TaskMailbox newImpl = new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); // Upgrade proxy to new implementation proxyAdmin.upgrade(ITransparentUpgradeableProxy(address(taskMailbox)), address(newImpl)); - // Check version after upgrade - assertEq(taskMailbox.version(), "2.0.0"); - // Verify state is preserved (owner should still be the same) assertEq(taskMailbox.owner(), owner); } @@ -3304,8 +3293,7 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { address attacker = address(0x9999); // Deploy new implementation - TaskMailbox newImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "2.0.0"); + TaskMailbox newImpl = new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); // Try to upgrade from non-owner, should revert vm.prank(attacker); @@ -3339,8 +3327,7 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { assertEq(address(retrievedConfig.taskHook), address(config.taskHook)); // Deploy new implementation - TaskMailbox newImpl = - new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "2.0.0"); + TaskMailbox newImpl = new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA); // Upgrade vm.prank(address(this)); // proxyAdmin owner @@ -3348,7 +3335,6 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { // Verify all state is preserved after upgrade assertEq(taskMailbox.owner(), newOwner); - assertEq(taskMailbox.version(), "2.0.0"); // Verify the executor operator set config is still there ExecutorOperatorSetTaskConfig memory configAfterUpgrade = taskMailbox.getExecutorOperatorSetTaskConfig(operatorSet); @@ -3361,7 +3347,7 @@ contract TaskMailboxUnitTests_Upgradeable is TaskMailboxUnitTests { function test_InitializerModifier_PreventsReinitialization() public { // Deploy a new proxy without initialization data TransparentUpgradeableProxy uninitializedProxy = new TransparentUpgradeableProxy( - address(new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA, "1.0.0")), + address(new TaskMailbox(address(mockBN254CertificateVerifier), address(mockECDSACertificateVerifier), MAX_TASK_SLA)), address(new ProxyAdmin()), "" ); diff --git a/src/test/utils/ArrayLib.sol b/src/test/utils/ArrayLib.sol index bab22c2684..bd8149ffbb 100644 --- a/src/test/utils/ArrayLib.sol +++ b/src/test/utils/ArrayLib.sol @@ -110,6 +110,15 @@ library ArrayLib { array[0] = createSetParams; } + function toArray(IAllocationManagerTypes.CreateSetParamsV2 memory createSetParamsV2) + internal + pure + returns (IAllocationManagerTypes.CreateSetParamsV2[] memory array) + { + array = new IAllocationManagerTypes.CreateSetParamsV2[](1); + array[0] = createSetParamsV2; + } + function toArray(IAllocationManagerTypes.AllocateParams memory allocateParams) internal pure diff --git a/src/test/utils/EigenLayerUnitTestSetup.sol b/src/test/utils/EigenLayerUnitTestSetup.sol index 6563d67925..f1fbdc02ea 100644 --- a/src/test/utils/EigenLayerUnitTestSetup.sol +++ b/src/test/utils/EigenLayerUnitTestSetup.sol @@ -70,7 +70,7 @@ abstract contract EigenLayerUnitTestSetup is Test { eigenLayerProxyAdmin = new ProxyAdmin(); // Deploy permission controller - permissionControllerImplementation = new PermissionController("9.9.9"); + permissionControllerImplementation = new PermissionController(); permissionController = PermissionController( address(new TransparentUpgradeableProxy(address(permissionControllerImplementation), address(eigenLayerProxyAdmin), "")) ); diff --git a/src/test/utils/Logger.t.sol b/src/test/utils/Logger.t.sol index 73ab22ba27..237fbcad95 100644 --- a/src/test/utils/Logger.t.sol +++ b/src/test/utils/Logger.t.sol @@ -51,25 +51,25 @@ abstract contract Logger is Test { bytes32 constant LOG_STATE_SLOT = bytes32(0); modifier noTracing() { - uint traceCounter = _getTraceCounter(); - if (traceCounter == 0) cheats.pauseTracing(); + // uint traceCounter = _getTraceCounter(); + // if (traceCounter == 0) cheats.pauseTracing(); - traceCounter++; - _setTraceCounter(traceCounter); + // traceCounter++; + // _setTraceCounter(traceCounter); _; - traceCounter = _getTraceCounter(); - traceCounter--; - _setTraceCounter(traceCounter); + // traceCounter = _getTraceCounter(); + // traceCounter--; + // _setTraceCounter(traceCounter); - if (traceCounter == 0) cheats.resumeTracing(); + // if (traceCounter == 0) cheats.resumeTracing(); } modifier noLogging() { - logging = false; + // logging = false; _; - logging = true; + // logging = true; } /// ----------------------------------------------------------------------- @@ -199,6 +199,17 @@ library print { } } + function createOperatorSets(IAllocationManagerTypes.CreateSetParamsV2[] memory p) internal pure { + console.log("Creating operator sets:"); + for (uint i; i < p.length; ++i) { + console.log(" operatorSet%d:".yellow(), p[i].operatorSetId); + for (uint j; j < p[i].strategies.length; ++j) { + console.log(" strategy%s: %s", cheats.toString(j), address(p[i].strategies[j])); + } + console.log(" slasher: %s", address(p[i].slasher)); + } + } + function deregisterFromOperatorSets(IAllocationManagerTypes.DeregisterParams memory p) internal pure { console.log("Deregistering operator: %s", address(p.operator)); console.log(" from operator sets:");